......或者我没有正确使用/理解它。看看我的测试片段:
$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的结果所以,这不是预期的结果。我做错了什么?
答案 0 :(得分:1)
where()
用于过滤集合,但是当您使用filter()
时,您只能为其提供一次订阅。由于where()
也是Eloquent模型的一种方法,你所说的基本上是
浏览所有订阅。对于每个,开始创建SQL查询。除非评估为false,否则请将订阅保留在所有订阅的列表中。
相反,你的意思是非常接近但不完全相同:
$test = $subscriptions->filter(function ($subscription) use ($id) {
return $subscription->description_id == $id;
});
根据您在实践中想要做的事情,可能还有其他更合适的方法。例如,如果您只想要第一个结果,因为您只有一个ID,那么您只需将上面的filter
替换为first
,然后获取第一个匹配的订阅而不是一个订阅的集合