【发布时间】:2014-11-08 10:38:39
【问题描述】:
我被 mysql join 查询卡住了。
我目前有以下:
$query = DB::table('packages')
->join('assigned_packages', function($join) use($id)
{
$join->on('packages.id', '=', 'assigned_packages.registered_package_id')
->where('assigned_packages.customer_id', '=', $id);
})
->join('registered_packages', function($join)
{
$join->on('packages.id', '=', 'registered_packages.id')
->where('registered_packages.id', '=', 1);
});
这很好用,但是你可以看到我有一个硬编码的 1:
->where('registered_packages.id', '=', 1);
此 1 应替换为表 assigned_packages 和列 registered_package_id 中的值。我试过了
$query = DB::table('packages')
->join('assigned_packages', function($join) use($id)
{
$join->on('packages.id', '=', 'assigned_packages.registered_package_id')
->where('assigned_packages.customer_id', '=', $id);
})
->join('registered_packages', function($join)
{
$join->on('packages.id', '=', 'registered_packages.id')
->where('registered_packages.id', '=', 'assigned_packages.registered_package_id');
});
但这不起作用。我究竟做错了什么?我想我需要第二个加入的第一个结果。但是我该怎么做呢?
dd(DB::getQueryLog());
输出:
array(2) {
[0]=>
array(3) {
["query"]=>
string(48) "select * from `customers` where `id` = ? limit 1"
["bindings"]=>
array(1) {
[0]=>
string(2) "45"
}
["time"]=>
float(0.65)
}
[1]=>
array(3) {
["query"]=>
string(278) "select * from `packages` inner join `assigned_packages` on `packages`.`id` = `assigned_packages`.`registered_package_id` and `assigned_packages`.`customer_id` = ? inner join `registered_packages` on `packages`.`id` = `registered_packages`.`id` and `registered_packages`.`id` = ?"
["bindings"]=>
array(2) {
[0]=>
string(2) "45"
[1]=>
string(39) "assigned_packages.registered_package_id"
}
["time"]=>
float(0.9)
}
}
【问题讨论】:
-
当您说第二个“不起作用”时,您会得到什么具体错误?另外,请在运行此查询后执行
dd(\DB::getQueryLog())并粘贴结果。 -
它根本不返回任何东西。我已经用日志更新了这个问题。谢谢。
标签: php mysql laravel laravel-4