Laravel 连接表关系

Posted

技术标签:

【中文标题】Laravel 连接表关系【英文标题】:Laravel joining table relationship 【发布时间】:2020-08-05 13:55:54 【问题描述】:

我想做一个连接表,但我不确定如何在 laravel 中建立关系。

我有 3 张桌子,productscategoriesproduct_categories。 product_categories 将由产品 ID 和类别 ID 组成。我如何在 laravel 中加入论文,这样我就可以像正常的关系一样调用$product->categories()

【问题讨论】:

【参考方案1】:

你们的关系将是belongsToMany

您的products 表将是

id | name

您的categories 表将是

id |  name

您的product_categories 表将是

id | product_id | category_id

根据 Laravel 中的关系

产品型号

class Product extends Model

    protected $table = 'products';
    
    public function categories()
    
        return $this->belongsToMany('App\Category','product_categories','product_id','category_id');
    

类别型号

class Category extends Model

    protected $table = 'categories';
   
    public function products()
    
        return $this->belongsToMany('App\Product','product_categories','category_id','product_id');
    

现在在控制器中

Product::with('categories')->get();

【讨论】:

感谢您的帮助!【参考方案2】:

这是many-to-many relationship。

您可以在productscategories 上使用belongsToMany,它会起作用。但是,您也应该重命名 product_categories 以遵守规则

按字母顺序使用单数表名

这将是category_product

【讨论】:

感谢您的帮助!

以上是关于Laravel 连接表关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中多对多关系中连接表的命名约定

在 laravel 中插入关系

Laravel:如何编写关于 belongsToMany 关系的连接计数查询?

Laravel:数据表搜索选项不使用关系表字段

Laravel Eloquent 在与其他表连接后从关系中选择字段

Laravel 从关系表返回记录