请考虑以下表结构:表>代码>国家> /代码>、代码>产品< /代码>和<代码>供应商<代码>:
countries
------------------------
id
name
code
product
------------------------
id
name
price
suppliers
------------------------
id
name
产品
可以在不同的国家销售
,但该产品的
供应商
可以不同。考虑到这一点,我制作了一个关系
表,以跟踪哪个供应商
正在交付哪个产品
,哪个国家
:
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
我的问题是,由于多对多关系只能在两个表上工作,因此我如何对该表使用雄辩的关系。关于这一点,还有其他解决办法吗?或者有没有其他有效的方法来实现这个场景?
谢谢你的帮助。
共3个答案
匿名用户
没有使用三个表建立关系的内置方法。每当我自己遇到类似的情况时,最好的解决方案似乎是建立一个中间模型,该模型与三个表相关。
因此,在您的情况下,我将创建一个供应商产品
,它与国家
、供应商
和产品
有关系。
匿名用户
我也有相同的场景类有多天Class细节使用这个函数在你的父模型
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)');
}
匿名用户
正如Jerodev所建议的,我制作了一个中间模型SupplierProduct
。我没有建立多对多关系,而是与SupplierProduct
建立一对多关系,并使用with
函数检索与该记录相关的所有数据。
这就是我的模型的样子(数据库结构与问题中描述的相同):
供应商roduct.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');
}
}
相关问题
- Java哈希码和桶大小-关系
- clang和gcc之间的右值参考过载差异
- Clang 3.5和3.6之间的过载分辨率变化是正确的还是bug的?
- Visual C关系运算符重载const正确性(使用std::排序)
- maven-plugin、maven-plugin和maven-shad-plugin之间jar区别?
- 使用Maven管理微服务之间的多个依赖
- 如何在mongo的两次约会之间求和?
- MongoDB和JS之间相同的日期格式,但它们不相等?
- 这两个声明之间最好的可行运算符==函数是哪个?
- C中的内存模型:顺序一致性和原子性
- 如何从CompositeData[]获取JMSReplyTo和JMSCor关系ID?
- 用于在ActiveMQ Artemis之间传输消息的SJMS2与JMS组件
- 如何在git存储库中的修订之间获取更改的文件列表?
- 线性布局删除元素之间的行间距
- 如何在Eclipse中将EMF模型实例的编码从ASCII更改为UTF-8?
- @嵌套事务场景中的事务-在RW和RO连接之间切换
- 奇怪的优化?在'libuv'中。请解释[重复]
- Spring Data JPA日期“之间”使用Date参数时的查询问题
- 在两个项目之间链接时使用虚函数获取链接错误
- Spring Boot缓存和GemFire之间的交替