php - 如何将原始查询替换为 laravel 格式

标签 php mysql laravel laravel-5 eloquent

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();

关于php - 如何将原始查询替换为 laravel 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330700/

相关文章:

php - 初始化 PHP 交互

php - mysql 基于 concat 列表的顺序

php - 通过不给出真实结果来排序

php - 如何使用特定于最后一行的条件回显循环中的特定数据

php - 从 php 页面在 mysql 表中插入 jquery var 时,我遇到了一件非常奇怪的事情

jquery - 如何使用 Jquery 从 UL 列表中只选择悬停的项目

sql - 是否可以取代 mysql 中的 ORDER BY 子句?

php - 验证失败时 Laravel FormRequest 响应状态代码

php - Laravel - 与软删除数据的隐式路由模型绑定(bind)

php - Laravel API 只能通过 VPN 访问