中间表& Laravel

时间:2016-10-04 14:36:16

标签: php mysql laravel eloquent

我是Eloquent(Pivot / Intermediate Tables)理念的新手。

我正在使用Laravel 5.3并且文档有点意义,但还不够。 Unfortunatley!

我有一些情景,我想尝试从...获取数据

我有以下数据库表

  • 公司
  • Company_Offers
  • 优惠
  • Company_Attributes
  • 属性

在我的场景中,以下是这些数据库表...

公司可以提供许多优惠

公司可以拥有许多属性

优惠可与许多公司联系

属性可以与许多公司相关联

我创建了5个模型以对应5个DB表。

我正在努力解决,我如何将这些关系融入我的模型中?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上,在laravel中,您不必为数据透视表创建模型。所以你可以看到三个看起来更像这样的模型:

<?php
/* /app/Company.php */
namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
     * The offers that belong to the company.
     */
    public function offers()
    {
        return $this->belongsToMany('App\Offer');
    }

     /**
     * The attributes that belong to the user.
     */
    public function attributes()
    {
        return $this->belongsToMany('App\Attribute');
    }
}


<?php
/* /app/Offer.php */
namespace App;

use Illuminate\Database\Eloquent\Model;

class Offer extends Model
{

    public function companies()
    {
        return $this->belongsToMany('App\Company');
    }
}

<?php
/* /app/Attribute.php */
namespace App;

use Illuminate\Database\Eloquent\Model;

class Attribute extends Model
{
    public function companies()
    {
        return $this->belongsToMany('App\Company');
    }
}

有关如何使用它来选择或更新您可以在此处找到的关系的更多信息: https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

答案 1 :(得分:1)

您想使用belongsToMany关系。例如:

class Company extends Model
{
    public function offers()
    {
        return $this->belongsToMany(App\Offer::class);
    }   
}

如果您使用company_idoffer_id设置了数据透视表,则此关系将自动生效,并且company_offer的透视表(按字母顺序排列的模型名称的单数版本)。如果您没有遵循命名约定,则可以指定数据透视表和外键,如下所示:

return $this->belongsToMany('App\Offer', 'Company_Offers', 'Company_ID', 'Offer_ID');