Laravel BelongsTo 通过关系

Lim*_*eat 6 relationship laravel eloquent laravel-5 route-model-binding

如何在 Laravel 中实现 BelongsToThrough 关系?

我有表:

**projects_table**
id 

**categories_table**
id
project_id 

**properties_table**
id
category_id
Run Code Online (Sandbox Code Playgroud)

类别属于项目

public function project(){
    return $this->belongsTo('App\Project');
}
Run Code Online (Sandbox Code Playgroud)

属性属于类别

public function category(){
    return $this->belongsTo('App\Category');
}
Run Code Online (Sandbox Code Playgroud)

我们怎样才能建立关系?

物业按类别属于项目

public function project(){
     return $this->belongsToThrough('App\Project', 'App\Category');
}
Run Code Online (Sandbox Code Playgroud)

编辑问题。

因为我想在我的应用程序上进行多租户,而租户是 PORJECT。我想按项目分离类别和属性。

类别是属于项目财产是属于类别

所以我想通过类别在属性和项目之间建立关系。现在,我需要project_id类别属性表上添加:,我认为这不是正确的方法。

小智 5

hasOneThrough您想与像这样指定的所有键一起使用

public function project()
    {
        return $this->hasOneThrough(
            Project::class,
            Category::class,
            'id', # foreign key on intermediary -- categories
            'id', # foreign key on target -- projects
            'category_id', # local key on this -- properties
            'project_id' # local key on intermediary -- categories
        );
    }
Run Code Online (Sandbox Code Playgroud)


zah*_*mon 0

你的属性belongsTo不正确。属性属于类别。

public function category(){
    return $this->belongsTo('App\Category','category_id');
}
Run Code Online (Sandbox Code Playgroud)

现在您可以从属性中获取项目,如下所示:

{{ $property->category->project->project_attribute }} 
Run Code Online (Sandbox Code Playgroud)