Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel eloquent-检查表中数组的所有值_Php_Laravel_Eloquent - Fatal编程技术网

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