通过 Eloquent 搜索具有多行的多个 ID

Posted

技术标签:

【中文标题】通过 Eloquent 搜索具有多行的多个 ID【英文标题】:Search Multiple ID's with Multiple Rows by Eloquent 【发布时间】:2021-12-31 22:46:07 【问题描述】:

我有一张表,用于获取输入数据的数据组合。比如多个分子(化学组合)作为一个组合。

输入

$id = $required->input('search'); // array:2 [ 0 => "3" 1 => "8"]

案例 1:

表 1

id refid product_id name ref_2
1 1,3,46,7 5 test 6
2 1,3,8,90 10 test1 8
3 3,8,67 14 test 4 11
4 8,699, 19 test 4 11

查询

$model=Model::whereIn('ref_id',$id)->pluck('product_id');

Fetch Product,组合查询包含id的3,8

但它正在获取 id 的包含 3 或 8

案例 2

表 2

id refid product_id name ref_2
1 3 5 test 6
2 5 10 test1 8
3 8 5 test 4 11
4 6 19 test 4 11
$model = Model::whereIn('ref_id', $id)->groupBy('product_id')->pluck('product_id');

这可能吗?有更好的方法吗?

【问题讨论】:

【参考方案1】:

whereIn 不是这样工作的,它使用IN 运算符生成查询。

SELECT * FROM table WHERE column IN (value1, value2)

您可以简单地使用LIKE 运算符来搜索ref_id 列。

$id = $required->input('search'); // array:2 [ 0 => "3" 1 => "8"]

$like = implode(',', $id); // string: "3,8"

$molecule = Molecule::where('ref_id', 'LIKE', "%$like%")->pluck('product_id');

【讨论】:

嘿,谢谢,我还有另一个问题。请详细说明案例 2 @Ozan kurt 这有点奇怪,在您的示例中,数据库中的 product_id 列将被您的 GROUP BY 子句覆盖。我不明白你的逻辑。 它是 SELECT * FROM table WHERE column IN (value1, value2) group by product_id。 是的,我知道,但这没有意义,因为它会导致您丢失数据。例如,第一行名称是“test”,但它将与第三行合并。这将导致第三行名称“test 4”被覆盖。 ---- 最后你会收到:i.imgur.com/p300tJt.png 是的,但有一个问题,产品 ID 将相同,因此不能被覆盖。我认为,ref_id 将被请求多个 id。如果 ref_id 3,8 的 product_id 为 5.so 它可以被分组。

以上是关于通过 Eloquent 搜索具有多行的多个 ID的主要内容,如果未能解决你的问题,请参考以下文章

通过 eloquent 更新 laravel 中的多行

一次更新多行 Laravel Eloquent

如何在 Laravel Eloquent ORM 中获取插入的多行数据

Laravel Eloquent 搜索表单查询(表单中的多个参数)

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系

在一个查询中使用具有多个关联数组的 laravel eloquent 获取数据