【问题标题】:Laravel 4 unable to join on multiple conditions using ->on( ) more than onceLaravel 4 无法多次使用 ->on() 加入多个条件
【发布时间】:2017-07-12 15:08:50
【问题描述】:

简而言之,我正在尝试使用多个条件进行连接。我们使用的是旧版 Laravel 4,我跟踪到的实际课程是 Illuminate\Database\Query\Builder。这是我要添加的内容:

->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 中这样做的正确方法是什么?

【问题讨论】:

    标签: php mysql sql laravel-4 left-join


    【解决方案1】:

    试试

    ->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');
    })
    

    【讨论】:

    • 不,这也会导致它失败(以一堆重定向结束)
    • 可以是第二次加入'visible_for_categories.name', '=', 'visible_for_categories'错了吗?你的意思是'visible_for_categories.name', '=', 'nv2.name'?或类似的东西?
    【解决方案2】:

    上述查询对我有用的方式如下:

    ->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 条件将提供所需的过滤器。然而,任何工作过的人,尤其是。使用 LEFT 或 RIGHT 连接知道这并不总是可能的。

    小心使用DB::raw 进行 SQL 注入,但在本例中,我们处理的是一个固定字符串,而不是一个变量。

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2016-12-31
      • 2014-12-10
      • 1970-01-01
      • 2013-04-24
      相关资源
      最近更新 更多