【问题标题】:Laravel 5 relationship between to belongLaravel 5 归属关系
【发布时间】:2023-04-07 18:33:01
【问题描述】:

我有一张三桌vendorbanquetproject, 关系如下描述:
* vendor hasMany 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属于vendor

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

*project属于vendor

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

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

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

【问题讨论】:

    标签: php laravel orm relationship


    【解决方案1】:

    你可以试试:

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

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

    $banquet->vendor->project;
    

    它给出了项目的集合。

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

    为此在Banquet.php 类中创建以下函数

    public function project()
    {
        return $this->hasManyThrough('App\Entities\Project', 'App\Entities\Banquet');
    }
    

    那么您的查询将是:

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

    【讨论】:

    • 谢谢,它有效!但是,有没有可能让项目喜欢 $banquet->project$banquet->vendor->project 好像太长了
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2021-05-09
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多