Laravel Eloquent:选择一个字段等于另一个字段的记录

Posted

技术标签:

【中文标题】Laravel Eloquent:选择一个字段等于另一个字段的记录【英文标题】:Laravel Eloquent: select records where one field equals another 【发布时间】:2020-06-03 21:16:09 【问题描述】:

如有重复,我深表歉意。是否可以在 Eloquent ORM 中选择一个字段等于另一个字段的记录?在 mysql 中,这意味着:

SELECT Id, Url, ModelId 
WHERE Url LIKE CONCAT('%', ModelId, '%')

是否可以在 Eloquent 中这样做,或者我必须使用原始查询?

【问题讨论】:

【参考方案1】:

在查询构建器(和 eloquent)中等于另一个字段的字段是 whereColumn('Url', 'LIKE', 'ModelId'),但由于您在第二部分中有其他内容,您将需要使用原始查询,例如,

DB::table('table')
   ->select('Id', 'Url', 'ModelId')
   ->where('Url', 'LIKE', DB::raw("CONCAT('%', ModelId, '%')"));

【讨论】:

谢谢!是否可以将whereColumn 与闭包一起使用以进行进一步处理?例如:如果我想SELECT * FROM table WHERE column1 = column2+column3 如果是,我该如何使用它们? 你仍然需要一个DB::raw,因为它是一个更复杂的操作,例如where('column1', DB::raw('column2+column3'))

以上是关于Laravel Eloquent:选择一个字段等于另一个字段的记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 在与其他表连接后从关系中选择字段

Laravel Eloquent 模型按局部列和关系模型列值排序

Laravel Eloquent - 使用 JSON 对象数组

如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?

Laravel - 我如何选择所有列等于 x 或 y 或 z (以及..)的地方? [复制]

在 Laravel Eloquent Query 中使用 unaccent PostgreSQL 函数