2017-02-22 12 views
0

概括地说,我试图做一个以上的条件加入。我们使用的是旧版Laravel 4,我已经跟踪它的实际类是Illuminate\Database\Query\Builder。下面是我加入:Laravel 4无法加入使用多个条件 - >上()不止一次

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 

它正常工作与第一$join->on()电话,但如果第二on称为页面失败。为什么是这样以及在Laravel 4中做到这一点的正确方法是什么?

回答

0

尝试

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id') 
    ->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 
+0

不,这也导致它失败(结束了一堆重定向) –

+0

它可以是第二个连接“visible_for_categories.name”,“=”,“visible_for_categories”是错误的?你的意思是''visible_for_categories.name','=','nv2.name'吗?或类似的东西? – Nerea

0

为我工作在上面查询方式如下:

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', DB::raw("'visible_for_categories'")); 
}) 

的查询生成器将承担在on()功能这三个值的字段,而不是字符串,并且还将解析出.时期。

一般的假设是,JOINS将具有关系字段连接来创建结构,并且所述条件语句WHERE将提供所需的过滤器。然而,任何人的工作尤其是。与左或右连接知道这并不总是可能的。

小心使用DB::raw SQL注入,但是在这种情况下,EAV表,我们正在处理一个固定的字符串,而不是一个变量。