我在Collection Model getSizesAttribute中有一个Accessor方法,该方法返回可用大小的数组,例如:['S','L'],现在我需要获取大小为'S'的Models。喜欢:
$collections = $collections->where('sizes','S');
但是size是数组,我可以以任何方式操纵它,以便仅在size具有特定大小的情况下才可以检查返回值。
我尝试制作另一个方法getIsSizeAttribute,例如:
public function getIsSizeAttribute($size){
return in_array($size,$this->sizes);
}
现在如何在
之类的条件下使用它$collections = $collections->where('is_size','S');
答案 0 :(得分:0)
您应该在集合上使用filter
$collections = $collections->filter(function($item, $index) {
return in_array('S', $item->sizes);
});
答案 1 :(得分:0)
Mutators和Accessors仅在查询已执行之后才运行。您可以按照Bangnokia的建议使用Collection::filter(),但这不会为实际将条件应用于初始请求带来任何性能上的好处。
我认为您在这里寻找的是Query Scope。将类似这样的内容添加到您的Model类中:
public function scopeSize(\Illuminate\Database\Eloquent\Builder $query, $size)
{
return $query->whereIn('sizes', $this->sizes[$size]);
}
并像这样访问它:
$collection = $model->size('S')->get();