【问题标题】:Multiple Conditional Joins多个条件连接
【发布时间】:2014-11-07 23:24:57
【问题描述】:

我尝试在我的 JOIN 中使用多个条件,但 Laravel 假设在 JOIN 时我将比较我的字段而不是一个常量值。我是否必须将其包装在 raw() 方法中,然后使用 DB::connection()->getPdo()->quote() 对其进行转义,或者是否有任何快捷方式?

->join('tags', function($join) use ($tags) {
    $join->on('tags.id', '=', 'resource_tag.tag_id');
    $join->on('tags.name', '=', $tags);
})

->join('tags', function($join) use ($tags) {
    $join->on('tags.id', '=', 'resource_tag.tag_id');
    $join->on('tags.name', '=', DB::raw(DB::connection()->getPdo()->quote($tags)));
})

这似乎有效,但似乎有点多。

【问题讨论】:

    标签: sql laravel laravel-4 laravel-query-builder


    【解决方案1】:

    如果不是字段,则必须使用DB::raw

    您可以通过删除connection() 方法来稍微缩短代码。您不需要它,因为您已经在默认连接上。

    DB::raw(DB::getPdo()->quote($tags))
    

    如果您不想使用DB::raw,可以使用 where 语句(在您的 join 方法之外)。

    where('tags.name', $tags)
    

     

    Model::join('tags', 'tags.id', '=', 'resource_tag.tag_id')->where('tags.name', $tags)
    

    【讨论】:

    • 感谢您的回复。是的,我以为我运气不好。真的很惊讶这些表单和查询构建器已经出现了这么长时间,但还没有内置东西。关于在哪里,是的,这是真的,但这会破坏我优化查询的目的哈哈。如果我这样做,连接会更大,然后被过滤。我已经完成了两者的解释,而且我这样做的方式似乎更有效率。
    猜你喜欢
    • 2016-11-12
    • 2018-12-06
    • 2011-08-15
    • 1970-01-01
    • 2022-01-08
    • 2011-12-07
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多