多个条件连接

Posted

技术标签:

【中文标题】多个条件连接【英文标题】: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)));
)

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

【问题讨论】:

【参考方案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)

【讨论】:

感谢您的回复。是的,我以为我运气不好。真的很惊讶这些表单和查询构建器已经出现了这么长时间,但还没有内置东西。关于在哪里,是的,这是真的,但这会破坏我优化查询的目的哈哈。如果我这样做,连接会更大,然后被过滤。我已经完成了两者的解释,而且我这样做的方式似乎更有效率。

以上是关于多个条件连接的主要内容,如果未能解决你的问题,请参考以下文章

使用条件连接多个表

BigQuery - 使用子查询和 OR 语句连接多个条件

具有多个连接条件的实体框架查询

如何使用方法语法在 LINQ 连接中添加多个条件

在多个连接中放置“开启”条件在哪里更好? (mysql)

Javascript竞争条件多个承诺连接字符串