php - 如何将原始查询替换为 laravel 格式
问题描述
DB::select("SELECT products.* ,categories.* FROM products
INNER JOIN category_products ON category_products.product_id = products.id
INNER JOIN categories ON category_products.category_id = categories.id
WHERE categories.slug='$slug'")
此行查询工作正常,但我无法访问它们的关系
$product->Categories->first()->name
@foreach($product->Images as $image)
我的产品型号如下:
class Product extends Model
{
public function Category(){
return $this->hasMany(CategoryProduct::class);
}
public function getCategory($id){
return Category::find($id)->name;
}
public function Images(){
return $this->hasMany(Image::class);
}
public function Categories()
{
return $this->belongsToMany(Category::class, 'category_products');
}
}
那么如何将我的代码转换为 Laravel eloquent
解决方案
请查看此文档 https://laravel.com/docs/5.0/eloquent#querying-relations
根据文档,您可以像这样更改代码:
$products= Product::whereHas('Categories', function($q) use ($slug)
{
$q->where('slug', $slug);
})->get();