首页 > 解决方案 > 如何将原始查询替换为 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

标签: phpmysqllaravellaravel-5eloquent

解决方案


请查看此文档 https://laravel.com/docs/5.0/eloquent#querying-relations

根据文档,您可以像这样更改代码:

$products= Product::whereHas('Categories', function($q) use ($slug)
{
    $q->where('slug', $slug);

})->get();

推荐阅读