如何将find_in_set()与laravel查询构建器一起使用。这是我的原始查询:
SELECT *
FROM table1 as t1
LEFT JOIN table2 as t2 ON find_in_set(t2.country, t1.fk_country_id)
答案 0 :(得分:4)
您可以使用DB:raw,如
DB::table('table1')->leftJoin('table2', function($join){
$join->on(DB::raw("find_in_set(table2.country, table1.fk_country_id)"));
});
===================
编辑:Uchiha答案是准确的,因为laravel“on”需要3个参数:字段,运算符,字段。即on('table1.id','=','table2.id')
答案 1 :(得分:3)
您可以像{/ 3>一样使用DB::raw
DB::table('table1')->leftJoin('table2', function($join){
$join->on(DB::raw("find_in_set(table2.country, table1.fk_country_id)",DB::raw(''),DB::raw('')));
});
答案 2 :(得分:1)
在我的案例中使用$join->on(
生成了错误的查询(Laravel 5.4)。
生成的错误SQL类似于t1 left join t2 on find_in_set(t2.tag, t1.tags) = where t1.foo..
在这里,whereRaw
为我工作
DB::table('table1')->leftJoin('table2', function($query) {
$query->whereRaw("find_in_set(...)");
})
参考:来自Laravel 5.5(https://github.com/laravel/framework/issues/23488)
的问题答案 3 :(得分:1)
以上内容不适用于最新版本的laravel。
使用DB::raw("find_in_set(...)") ,">", DB::raw("'0'")
DB::table('table1')->leftJoin('table2', function($join){
$join->on(DB::raw("find_in_set(table2.country, table1.fk_country_id)", ">" , DB::raw("'0'")));
});
答案 4 :(得分:0)
它不能像上面提到的答案那样起作用。
使用where
子句代替on。就我而言,它有效。
DB::table('table1')->leftJoin('table2', function($join){
$join->whereRaw("find_in_set(table2.country, table1.fk_country_id)");
});