Laravel 5.1中的Eloquent belongsTo关系在多个列上连接

4

我正在连接一个远程数据库,这个数据库设计得不好,但是我无法进行任何修改,我只有读取数据的权限。它的结构如下:

Products
    - id
    - style_id
    - department_id

Brands
    - id
    - Name
    - style_id
    - department_id

如您所见,产品不仅有一个brand_id字段,而且还有一个style_iddepartment_id字段,您需要连接这些字段才能找出产品的品牌。

那么我该如何在我的Product模型中设置belongsTo关系以实现此目的?

2个回答

2
我最终制作了一个范围来帮我完成这个任务。
public function scopeWithBrand($query)
{
    $query->join('Brands', function($q) {
        $q->on('Products.department_id', '=', 'Brands.department_id')
          ->on('Products.style_id', '=', 'Brand.style_id');
    })->addSelect(['Brands.id AS brand_id', 'Products.*']);
}

0
据我所知,Laravel不支持复合键,Laravel仓库上有一个问题,开发人员已回答他们没有实现的意图。
我认为你只能像这样组合wheres来查询产品品牌查询,例如按品牌查询产品:
Product::where('style_id',$brand->style_id)->where('department_id',$brand->department_id)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接