我有这个查询
$products = DB::table('product_attributes')
->where('product_attributes.attribute_id', '=', $attri->id)
->joinoin('products', 'products.id', '=',
->get();
它返回
Collection {#2788 ▼
#items: array:2 [▼
0 => {#2785 ▶}
1 => {#2786 ▶}
]
}
但是我无法访问我的产品封面图片,因此我将查询更改为:
$products = DB::table('product_attributes')
->where('product_attributes.attribute_id', '=', $attri->id)
->join('products', 'products.id', '=', 'product_attributes.product_id')
->join('covers', 'covers.imageable_id', '=', 'products.id')
->get();
并返回:
Collection {#2805 ▼
#items: []
}
空!
同样,我将查询更改为:
$products = DB::table('product_attributes')
->where('product_attributes.attribute_id', '=', $attri->id)
->leftJoin('products', 'products.id', '=', 'product_attributes.product_id')
->leftJoin('covers', 'covers.imageable_id', '=', 'products.id')
->get();
并返回:
Collection {#2807 ▼
#items: array:2 [▼
0 => {#2804 ▶}
1 => {#2805 ▶}
]
}
但仍无法访问我的封面(与我的第一个查询相同)。
如何通过其他所有型号关系访问我的产品?
这与我的产品型号还有其他关系
public function covers()
{
return $this->hasMany(Cover::class, 'imageable_id');
}
public function photos()
{
return $this->hasMany(Photo::class, 'imageable_id');
}
public function options(){
return $this->belongsToMany(Option::class, 'product_options', 'product_id', 'option_id');
}
public function attributes(){
return $this->belongsToMany(Attribute::class, 'product_attributes', 'product_id', 'attribute_id');
}
public function categories(){
return $this->belongsToMany(Category::class, 'product_categories', 'product_id', 'category_id');
}
答案 0 :(得分:0)
如果建立了关系,则可以通过以下方式进行:
$products = Product::with(['covers','attributes'])->whereHas('attributes', function ($query) use ($attri) {
$query->where('product_attributes.attribute_id', $attri->id);
})->get();
这样,您将获得所有具有给定标识符属性的产品,并且还将检索这些产品的封面和属性。
例如,要访问第一个产品中的封面或属性,您可以执行$products->first()->covers
答案 1 :(得分:0)
仅初始化主对象
$product = Product::findOrFail($id);
使用关系作为对象。不使用查询生成器。
$product->covers();
$product->photos();