laravel - Laravel如何在查询构建时通过where条件将参数传递给模型中的Accessor方法?
问题描述
我在集合模型getSizesAttribute中有一个Accessor方法,它返回可用大小的数组,例如:['S','L'],现在我需要获取大小为'S'的模型。喜欢:
$collections = $collections->where('sizes','S');
但是大小是数组,我可以无论如何操作它,以便只有在大小具有特定大小时才能检查返回。
我尝试制作另一种方法 getIsSizeAttribute,例如:
public function getIsSizeAttribute($size){
return in_array($size,$this->sizes);
}
现在我怎么能在 Where 条件下使用它
$collections = $collections->where('is_size','S');
解决方案
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();