如何检查集合的列是否与数组匹配

时间:2019-01-21 16:54:23

标签: laravel

  • 模型CustomerDocuments保存着客户文档,doc_id是此模型中的一列,表示其中有哪个文档。
  • 我有一系列所需的文档ID,例如$neededDocs = [1,2,3]

如何检查我的收藏集CustomerDocuments在该收藏集中的每个项目中是否包含$neededDocs

如果所有$neededDocs都存在于每个CustomerDocuments.doc_id中,则返回true,否则返回false。

我想使用collection->进行以下操作:

CustomersDocuments::where('customer_id', $customer->id)
    ->contains('doc_id',$required_onboarding_docs)
    ->get();

但是这种语法是错误的

1 个答案:

答案 0 :(得分:1)

我认为您可能可以通过以下方式实现此目标:

$documents = CustomersDocuments::where('customer_id', $customer->id)
    ->get()
    ->pluck('doc_id')
    ->toArray();

上面的代码将输出包含所有doc_id的数组。

return $documents == $neededDocs; 

然后可以将其与$neededDocs数组进行比较。

编辑:但是,如果您要检查集合中的每一行是否包含doc_id中存在的$neededDocs,则可以这样操作:

$collection = CustomersDocuments::where('customer_id', $customer->id)->get(); 

return $collection->contains(function($value, $key) use ($neededDocs) {
    return in_array($value->doc_id, $neededDocs); 
}); 

我不确定您想要哪一个,但是这些应该可以解决。