例如,假设我销售空调和空气过滤器。它们都是product表中的产品。但我还有一个related_products表,其中每个空调都有过滤器,其中product_id是AC,filter_id是过滤器产品表中对应的product_id:
| 产品ID| filter_id|
| --|--|
| 1 | 10 |
| 1 | 11 |
| 2 | 10 |
| 2 | 15 |
Laravel Eloquent中如何定义这些关系?这看起来几乎像是引用单个产品表的透视表。related_products表没有关联的Model(我不这么认为),所以我会尝试在Product模型中定义这个关系吗?
1条答案
按热度按时间yqkkidmi1#
由于
product_id
和filter_id
都指向products
中的记录,这将是一个自引用的多对多关系,related_products
作为products.product_id == related_products.product_id
和products.product_id == related_products.filter_id
之间的枢轴:https://laravel.com/docs/10.x/eloquent-relationships#many-to-many.
这与文档之间的唯一区别是,您需要在
Product
类中定义两次关系:字符串
'id', 'product_id'
和'id', 'filter_id'
的顺序,因为我不记得哪个是pivot表上的本地键(products.id
),哪个是外键(related_products.product_id
和related_products.filter_id
),而且我没有可用的数据库来测试和确认这一点 *此外,默认情况下,
many-to-many
在Laravel中不使用中间模型,即不需要定义class RelatedProduct extends Model { ... }
。如果你愿意,你可以 *,Laravel支持这一点,但这不是必需的:https://laravel.com/docs/10.x/eloquent-relationships#defining-custom-intermediate-table-models