Laravel 5之间的关系属于

时间:2016-11-01 04:19:31

标签: php laravel orm relationship

我有一张三张桌vendor banquet project, 这种关系如下所述:
* vendor有多个banquetproject

class Vendor extends Model
{
   .....
  public function project()
  {
     return $this->hasMany('App\Entities\Project' ,'vendorId' ,'id');
  }

  public function banquet()
  {
     return $this->hasMany('App\Entities\Banquet' ,'vendorId' ,'id');
  }
}

* banquet belongsTo vendor

class Banquet extends Model
{
    ...
    public function vendor()
    {
        return $this->belongsTo('App\Entities\Vendor' ,'vendorId' ,'id');
    }
}

* project belongsTo vendor

class Project extends Model
{
    ...
    public function vendor()
    {
        return $this->belongsTo('App\Entities\Vendor' ,'vendorId' ,'id');
    }
}

在某些情况下,我只有banquet.id可以找到banquet数据和 同时,需要在查询中获取所有相同的vendorId project数据。

如何定义projectbanquet之间的新关系?或任何想法可以在一次查询中找到两种数据?

1 个答案:

答案 0 :(得分:3)

您可以尝试:

$banquet = Banquet::where('id', $banquet_id)->with('vendor.project')->first();

然后获取所有相同的vendorId project数据:

$banquet->vendor->project;

它给出了项目的集合。

OR

您可以使用has-many-through关系来访问project模型中的banquet

为此,在Banquet.php class

中创建以下函数
public function project()
{
    return $this->hasManyThrough('App\Entities\Project', 'App\Entities\Banquet');
}

然后您的查询将如下:

$banquet = Banquet::where('id', $banquet_id)->with('project')->first();

$banquet->project;