左边的find_in_set加入Laravel

时间:2015-12-22 07:41:21

标签: php laravel-5.1

如何将find_in_set()与laravel查询构建器一起使用。这是我的原始查询:

SELECT *
FROM table1 as t1
  LEFT JOIN table2 as t2 ON find_in_set(t2.country, t1.fk_country_id)

5 个答案:

答案 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)");
});