laravel查询中where条件的数组值

时间:2017-11-14 08:17:11

标签: php mysql arrays laravel-5.3 laravel-query-builder

我有一个名为assetIDs的数组,如下所示

$assetIDs = Collection {#505 ▼
  #items: array:2 [▼
    0 => 4
    1 => 7
  ]
}

我在表格中有数据如下所示

data

我正在使用此

对上表进行查询

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)->pluck('supplier_id');

以上查询的结果在

之下
Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
    2 => 2
  ]
}

这里whereIn返回满足条件的所有可能行。实际上我需要获得结果,就像supplier_id具有assetIDs数组的值一样。在我的表supplier_id=1中,47都有值就像下面的集合一样。

Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
  ]
}

有人可以建议我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您可以尝试:

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)
               ->groupBy('supplier_id')
               ->havingRaw('count(distinct asset_id) = ' . count($assetIDs))
               ->pluck('supplier_id');

答案 1 :(得分:0)

这是你应该做的mysql:

1-获取拥有超过1个supplier_id的所有ID:

SELECT supplier_id, Count(distinct asset_id) as dist_asst
 FROM Table
 GROUP BY supplier_id
 HAVING dist_asst > 1

2-然后进行加入:

SELECT t1.supplier_id
FROM Table t1
INNER JOIN (SELECT supplier_id, Count(distinct asset_id) as dist_asst
     FROM Table
     GROUP BY supplier_id
     HAVING dist_asst > 1) t2 on t2.supplier_id = t1.supplier_id