Laravel Eloquent Inner Join mit mehreren Bedingungen
Lesezeit: 3 Minuten
Wouter Neueboom
Ich habe eine Frage zu Inner Joins mit mehreren On-Werten. Ich habe meinen Code so in Laravel erstellt.
public function scopeShops($query) {
return $query->join('kg_shops', function($join)
{
$join->on('kg_shops.id', '=', 'kg_feeds.shop_id');
// $join->on('kg_shops.active', '=', "1"); // WRONG
// EDITED ON 28-04-2014
$join->on('kg_shops.active', '=', DB::raw("1"));
});
}
Das einzige Problem ist, es gibt dieses Ergebnis:
Column not found: 1054 Unknown column '1' in 'on clause' (SQL: select `kg_feeds`.* from `kg_feeds` inner join `kg_shops` on `kg_shops`.`id` = `kg_
feeds`.`shop_id` and `kg_shops`.`active` = `1`) (Bindings: array ( ))
Wie Sie sehen können, gehen die mehreren Bedingungen in der Verknüpfung gut, aber es denkt, dass die 1 ist eine Spalte anstelle eines Strings. Ist das überhaupt möglich, oder muss ich das wo beheben.
Wenn das ‘active’-Feld einen String enthält, müssen Sie DB::raw(“‘YES'”) anstelle von DB::raw(‘YES’) verwenden.
– Anees Sadeek
15. August 2019 um 7:34 Uhr
//You may use this example. Might be help you...
$user = User::select("users.*","items.id as itemId","jobs.id as jobId")
->join("items","items.user_id","=","users.id")
->join("jobs",function($join){
$join->on("jobs.user_id","=","users.id")
->on("jobs.item_id","=","items.id");
})
->get();
print_r($user);
Das Alpha
Weil Sie es so gemacht haben, dass beide in Ihrem unten angegebenen Code Join-Bedingungen sind:
public function scopeShops($query) {
return $query->join('kg_shops', function($join)
{
$join->on('kg_shops.id', '=', 'kg_feeds.shop_id');
$join->on('kg_shops.active', '=', "1");
});
}