Laravel在查询构建时如何通过where条件将参数传递给模型中的访问器方法?

Laravel在查询构建时如何通过where条件将参数传递给模型中的访问器方法?,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我在集合模型GetSizeAttribute中有一个访问器方法,它返回可用大小的数组,例如:['S','L',现在我需要获取大小为'S'的模型。比如: $collections = $collections->where('sizes','S'); 但大小是数组,我是否可以操作它,这样我就可以只在大小有特定大小时检查返回值 我尝试创建另一个方法getIsSizeAttribute,如: public function getIsSizeAttribute($size){ re

我在集合模型GetSizeAttribute中有一个访问器方法,它返回可用大小的数组,例如:['S','L',现在我需要获取大小为'S'的模型。比如:

$collections = $collections->where('sizes','S');
但大小是数组,我是否可以操作它,这样我就可以只在大小有特定大小时检查返回值

我尝试创建另一个方法getIsSizeAttribute,如:

public function getIsSizeAttribute($size){
      return in_array($size,$this->sizes);
}
现在我怎么能在这样的条件下使用它呢

$collections = $collections->where('is_size','S');

您应该在收集时使用
过滤器

$collections = $collections->filter(function($item, $index) {
    return in_array('S', $item->sizes);
});
并且只在查询已经执行之后,运行皮肤深度。您可以按照Nokia的建议使用,但这不会给您实际将条件应用于初始请求的性能带来任何好处

我想你要找的是一个。在模型类中添加如下内容:

public function scopeSize(\Illuminate\Database\Eloquent\Builder $query, $size)
{
    return $query->whereIn('sizes', $this->sizes[$size]);
}
然后像这样访问它:

$collection = $model->size('S')->get();

我可以注意到一个错误的命名,但我不确定它是否有帮助。在您的例子中,您有
is_size
自定义属性,并且您搜索
is_size
,因此将其修改为
$collections->where('is_size','S')
并在需要时重试works@nakov也尝试了is_尺寸,但仍然无法解决修改后的问题。太棒了,谢谢回复。