【问题标题】:Retrieving all records through multiple hasMany relationships通过多个 hasMany 关系检索所有记录
【发布时间】:2015-04-16 09:32:51
【问题描述】:

抱歉标题含糊,我不确定是否有这个名字。

我在我的 Laravel 4 应用程序中的模型之间基本上有以下关系:

User -----< Template -----< Job

(用户有很多模板,模板有很多工作)。

我想检索用户的所有作业(通过他们的 ID)。通常我会这样做:

Job::where('user_id', '=', Auth::user()->id);

但是作业和用户之间的联系是通过templates 表存在的,所以我尝试这样做:

$jobs = Auth::user()->templates->jobs;

但这给了我一个关于 $jobs 属性不存在的错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$jobs

如何在这种情况下检索用户的所有作业?我不想在UserJob 之间建立关系,因为我似乎只是在复制已经存在的关系?

谢谢。

【问题讨论】:

    标签: php laravel laravel-4 relationship


    【解决方案1】:

    Laravel 有一个 hasManyThrough 关系。如果User hasMany Template,Template hasMany Job,可以通过Template关系设置一个User hasMany Job。

    用户模型:

    public function jobs() {
        return $this->hasManyThrough('Job', 'Template');
    }
    

    通过这种关系,您可以通过以下方式访问用户的工作:

    $jobs = Auth::user()->jobs;
    

    这样,它不会复制已经存在的关系;它只是设置语法以按照您需要的方式使用现有关系。您无需更改任何字段或修改任何数据。

    【讨论】:

      猜你喜欢
      • 2020-08-04
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2015-10-20
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多