考虑到我对于表countries
,products
和suppliers
具有以下表结构:
countries
------------------------
id
name
code
product
------------------------
id
name
price
suppliers
------------------------
id
name
product
可以用不同的countries
出售,但是其中的supplier
中的product
可以不同。牢记这一点,我制作了一个relations
表来跟踪哪个supplier
在交付哪个product
在哪个country
中:
relations
------------------------
country_id
product_id
supplier_id
假设我有一个产品A
,我需要在US
和CA
国家/地区中存放,但这些国家/地区的供应商是X
和Y
分别。结构看起来像这样:
countries
-------------------------------
id | name | code
-------------------------------
1 | United States | US
2 | Canada | CA
product
-------------------------------
id | name | price
-------------------------------
1 | A | 3.99
suppliers
------------
id | name
------------
1 | X
2 | Y
relations
-------------------------------
country_id | product_id | supplier_id
-------------------------------
1 | 1 | 1
2 | 1 | 2
我的问题是,由于多对多关系仅在两个表上起作用,因此如何对表使用口才关系。还有其他解决方法吗?还是有其他有效的方法来实现这种情况?
谢谢您的帮助。
答案 0 :(得分:2)
没有使用三个表建立关系的内置方法。每当我自己遇到类似的情况时,最好的解决方案似乎是制作一个与三个表相关的中间模型。
因此,在您的情况下,我将创建一个具有SupplierProduct
,country
和supplier
关系的product
。
答案 1 :(得分:0)
我也有相同的场景类,有多个DaysClassDetails 在您的父模型中使用此功能
public function classType()
{
return $this->hasMany('App\DaysClassDetails(middlemodel)');
}
和DaysClassDetails具有多个DaysClassTimeDetails
public function classTime()
{
return $this->hasMany('App\DaysClassTimeDetails(lastchildmodel)');
}
public function classType(){
return $this->belongsTo('App\ManageClass(parentmodel)');
}
答案 2 :(得分:0)
作为Jerodev suggested,我制作了一个中间模型SupplierProduct
。我没有建立多对多关系,而是与SupplierProduct
建立了一对多关系,并使用with
函数检索了与该记录相关的所有数据的数据。
这是我的模型的样子(数据库结构与上述问题相同)
SupplierProduct.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class SupplierProduct extends Model {
public function country() {
return $this->belongsTo(Country::class);
}
public function product() {
return $this->belongsTo(Product::class);
}
public function supplier() {
return $this->belongsTo(Supplier::class);
}
}
Country.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Country extends Model {
public function products() {
return $this->hasMany(SupplierProduct::class)->with('product', 'supplier');
}
}
Product.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model {
public function products() {
return $this->hasMany(SupplierProduct::class)->with('country', 'supplier');
}
}
Supplier.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Supplier extends Model {
public function products() {
return $this->hasMany(SupplierProduct::class)->with('country', 'product');
}
}