Php laravel eloquent-检查表中数组的所有值
我有一个表Php laravel eloquent-检查表中数组的所有值,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个表选项和一个字符串数组[“value1”、“value2”、“value3”] 我要做的是检查数组中的所有值是否都存在于表中 我尝试了,其中,但我认为它会检查表中是否存在任何值 这就是我目前所做的: $v = ["value1", "value2", "value3"]; $options = Options::whereIn('value', $v)->get(); if ($options->count()
选项
和一个字符串数组[“value1”、“value2”、“value3”]
我要做的是检查数组中的所有值是否都存在于表中
我尝试了,其中
,但我认为它会检查表中是否存在任何值
这就是我目前所做的:
$v = ["value1", "value2", "value3"];
$options = Options::whereIn('value', $v)->get();
if ($options->count() != count($v)) {
//something must be missing
}
这是可行的,但我想知道是否有更好的方法?该表有数百万条记录,因此如果可能,我只想进行一次查询
谢谢
其中
专门检查数组中的值
您可以尝试以下方法:
$search_values=['value1','value2','value3';
$found=true;
foreach($search\u值为$search){
如果(!Search::where('column',$Search)->first()){
$found=false;
}
}
如果(!$found){
//一定少了什么
}
justcarty评论中的答案在技术上是正确的,但是如果您不打算使用这些选项,您可以通过不引入这些选项来减少负载
if (Option::whereIn('value', [...])->count() != count([...])) {
//perform action
}
另外请注意,正如justcarty所提到的,如果数据库中有多个值出现,这将不起作用,但可以通过向查询中添加DISTINCT子句来解决这一问题
if (Option::distinct(['value'])->whereIn('value', [...])->count() != count([...])) {
//perform action
}
我不明白你的代码是否有效。请你解释一下数据库中的数据是如何存在的。是以数组形式存储[“value1”、“value2”、“value3”]还是具有单个值,如“value1”、“value2”。这与您的问题无关,但在Laravel中,使模型奇异通常是最佳做法。所以您应该使用选项
。据我所知,您想检查值1
、值2
和值3
是否作为单独的条目存在于数据库中?如果是这样,你就不能只做$v=[“value1”、“value2”、“value3”]$选项=选项::其中('value',$v)->get();如果($options->count()==count($v)){echo“三个都存在”}
。这假设您只会出现一次value1
、value2
和value3
@JustCarty谢谢。这就是我所做的,但我没有把它清楚地放在问题中,对不起!我提取所有值然后计数的唯一原因是,我不确定OP是否需要在之后使用这些选项。如果不是,那么这是最好的方法。至于不同的
值,这是一个很好的叫喊,我记不起语法,到我记起来的时候,我无法编辑注释:P