I am stuck at a mysql join query.
I currently have the following:
$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);
});
This works fine, but as you can see i have a hardcoded 1:
->where('registered_packages.id', '=', 1);
This 1 should be replaced with the value from the table assigned_packages and the column registered_package_id. I tried
$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');
});
But that does not work. What am I doing wrong? I guess i need the result from the first join for the second one. But how can I do that?
dd(DB::getQueryLog());
outputs:
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)
}
}
Your join closure requires either DB::raw like suggested, or the method that is intended for it on:
->join('registered_packages', function($join)
{
$join->on('packages.id', '=', 'registered_packages.id')
->on('registered_packages.id', '=', 'assigned_packages.registered_package_id');
});
where on joins is used only for values passed to the query.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With