善意的收藏条件

时间:2015-10-11 11:40:45

标签: laravel eloquent

我想获得替代产品图片。

dd($alternativeProduct->pictures);

当死亡和转储我得到这个结果。

enter image description here

我只需要获得主要的图片。如果main等于1.这是主要图片。

写作时

dd($alternativeProduct->pictures->where('main', 1))

我有一个空数组。

enter image description here

这是我与产品和图片关系的关系

public function pictures(){
    return $this->hasMany('App\Models\ProductPicture');
}

我该怎么办?

2 个答案:

答案 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) 访问关系,将返回一个查询生成器实例,该实例允许您向数据库查询添加条件,并仅获取所需的实际项目来自数据库,而不是全部取出它们并在之后过滤掉它们。