过滤返回错误的结果

时间:2018-01-28 16:01:43

标签: php laravel filter

......或者我没有正确使用/理解它。看看我的测试片段:

$subscriptions = auth()->user()->subscriptions()->get();

$id = '40';

$test = $subscriptions->filter(function ($subscription) use ($id) {
    return $subscription->where('description_id', $id);
});

dd($test);

目前,数据库中有一个Subscription,其中description_id为20.运行上述测试代码段时,我仍然会返回一个description_id为20的结果所以,这不是预期的结果。我做错了什么?

1 个答案:

答案 0 :(得分:1)

where()用于过滤集合,但是当您使用filter()时,您只能为其提供一次订阅。由于where()也是Eloquent模型的一种方法,你所说的基本上是

  

浏览所有订阅。对于每个,开始创建SQL查询。除非评估为false,否则请将订阅保留在所有订阅的列表中。

相反,你的意思是非常接近但不完全相同:

$test = $subscriptions->filter(function ($subscription) use ($id) {
    return $subscription->description_id == $id;
});

根据您在实践中想要做的事情,可能还有其他更合适的方法。例如,如果您只想要第一个结果,因为您只有一个ID,那么您只需将上面的filter替换为first,然后获取第一个匹配的订阅而不是一个订阅的集合

相关问题