Ama*_*ngh 5 mysql laravel eloquent laravel-eloquent
我有两个模型,一个是要约(用于要约表),另一个是品牌(用于品牌表)。这些模型之间存在“多对多”关系。
我有一个表offer_brands,它映射了这两个表之间的关系。在此表中,我具有offer_id列(可将此表链接到商品表)和brand列(可将此表链接到brands表),brands表中的usind brand_name列。
在品牌模型中,我想要一个可以返回所有报价的关系。
我知道我可以做到
public function offers()
{
return $this->belongsToMany(Offer::class, 'offer_brands', 'offer_id', 'brand_id'); // But don't have brand_id column insted I have brand column that contains brand names
}
Run Code Online (Sandbox Code Playgroud)
另外,我尝试了
public function offers()
{
return $this->belongsToMany(Offer::class, 'offer_brands', 'offer_id', 'brand'); // But Eloquent compare this column with id column of brands table.
}
Run Code Online (Sandbox Code Playgroud)
以防万一有人仍在寻找答案..以下是解决此问题的方法。
例如,我有用户角色。并且数据透视表 ( team_users) 具有user_id. role_id但它不包含role列,它基本上是表slug中角色的列roles。
我可以像这样指定关系:
public function roles()
{
return $this->belongsToMany('App\Role', 'team_users', 'user_id', 'role', 'id', 'slug');
}
Run Code Online (Sandbox Code Playgroud)
基本上App\Role就是关系模型。
team_users是数据透视表名称。
user_id是外部主键(所以team_users会有一个名为 的列user_id)
role是相关的主键(所以team_users会有一个名为 的列role)
id是父键(因此在App\UserLaravel 中将查找列值等于数据透视表中的id外键的行)。user_id
slug是相关的键(所以在App\RoleLaravel 中将查找slug列值等于role数据透视表中的列的行)
正确的定义:
return $this->belongsToMany(Offer::class, 'offer_brands', 'brand', 'offer_id');
Run Code Online (Sandbox Code Playgroud)
但使用命名约定是个好主意。您可以将表brand_offer和外键命名为offer_id和brand_id。在这种情况下,关系将如下所示:
return $this->belongsToMany(Offer::class);
Run Code Online (Sandbox Code Playgroud)
在我的最佳实践存储库中了解有关Laravel 命名约定的更多信息。
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |