我是Eloquent(Pivot / Intermediate Tables)理念的新手。
我正在使用Laravel 5.3并且文档有点意义,但还不够。 Unfortunatley!
我有一些情景,我想尝试从...获取数据
我有以下数据库表
在我的场景中,以下是这些数据库表...
公司可以提供许多优惠
公司可以拥有许多属性
优惠可与许多公司联系
属性可以与许多公司相关联
我创建了5个模型以对应5个DB表。
我正在努力解决,我如何将这些关系融入我的模型中?
谢谢!
答案 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_id
和offer_id
设置了数据透视表,则此关系将自动生效,并且company_offer的透视表(按字母顺序排列的模型名称的单数版本)。如果您没有遵循命名约定,则可以指定数据透视表和外键,如下所示:
return $this->belongsToMany('App\Offer', 'Company_Offers', 'Company_ID', 'Offer_ID');