我想获得替代产品图片。
dd($alternativeProduct->pictures);
当死亡和转储我得到这个结果。
我只需要获得主要的图片。如果main等于1.这是主要图片。
写作时
dd($alternativeProduct->pictures->where('main', 1))
我有一个空数组。
这是我与产品和图片关系的关系
public function pictures(){
return $this->hasMany('App\Models\ProductPicture');
}
我该怎么办?
答案 0 :(得分:0)
您可能想要使用whereLoose:
dd($alternativeProduct->pictures->whereLoose('main', 1))
来自Laravel文档:
where方法在检查项目值时使用严格比较。使用whereLoose方法使用“松散”比较进行过滤。
答案 1 :(得分:0)
集合中的where
方法有三个参数:$key
,$value
和$strict
,如果调用时未传递,则最后一个默认为true
方法。当$strict
为真时,比较是通过===
进行的,而"1" === 1
不进行类型强制,意味着"main" => "1"
为假。
从您的转储数据中,我可以看到1
这意味着它是一个字符串,并且您将整数where
传递给$alternativeProduct->pictures->where('main', 1, false);
// or the equivalent helper whereLoose
$alternativeProduct->pictures->whereLoose('main', 1);
方法,从而产生我上面描述的内容错误条件并返回空结果集。你可以通过禁用严格比较来解决这个问题:
$alternativeProduct->pictures->where('main', "1");
或传递一个字符串作为值:
$alternativeProduct->pictures()->where('main', 1)->get();
话虽如此,如果这是您在该请求的上下文中使用该集合的唯一位置,我建议您在数据库级别过滤结果,而不是在获取结果后,如下所示:
->pictures()
以方法->pictures
而不是属性@current_tags = [1,5,7,10,15]
@widgets = Widget.joins(:tags).where("tags.id IN (?)", @current_tags)
访问关系,将返回一个查询生成器实例,该实例允许您向数据库查询添加条件,并仅获取所需的实际项目来自数据库,而不是全部取出它们并在之后过滤掉它们。