【问题标题】:Search Multiple ID's with Multiple Rows by Eloquent通过 Eloquent 搜索具有多行的多个 ID
【发布时间】: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');

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

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案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 它可以被分组。
    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多