Laravel属于通过关系

时间:2019-09-14 04:05:18

标签: laravel laravel-5 eloquent relationship route-model-binding

如何在Laravel中实现BelongsToThrough关系?

我有桌子:

**projects_table**
id 

**categories_table**
id
project_id 

**properties_table**
id
category_id
  

类别属于项目

public function project(){
    return $this->belongsTo('App\Project');
}
  

财产属于类别

public function category(){
    return $this->belongsTo('App\Category');
}

我们如何建立关系?

  

财产属于通过类别进行项目

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

编辑问题。

因为我想对我的应用程序进行多租户,所以租户是PORJECT。我想按项目区分类别和属性。

CATEGORY属于PROJECT 属性属于CATEGORY

所以我想通过CATEGORY建立PROPERTY和PROJECT之间的关系。 现在,我需要在类别 properties 表上都添加project_id,我认为这不是正确的方法。

3 个答案:

答案 0 :(得分:1)

我想您可以进行$project->category->property,因为您要在Project和Category之间建立一对一的关系,而在Category和属性之间又具有一对一的关系,此外,如果您想定义一个通过您引起的项目与财产之间的关系,您可以考虑建立has-one-through关系。

在项目模型中

public function property()
{
    return $this->hasOneThrough('App\Property', 'App\Category');
}

和属性模型中

public function property()
{
    return $this->hasOneThrough('App\Project', 'App\Category');
}

可能是

在这种情况下,您也可以执行

之类的操作

在媒体资源模型中

public function project()
{

return $this->category->project( or projects);
     or if Category and properties have many-to-many relationship
     you can do `return $this->categories->with('projects')->get();`
}

答案 1 :(得分:0)

您的属性belongsTo不正确。财产属于类别。

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

现在您可以从以下属性中获取项目:

{{ $property->category->project->project_attribute }} 

答案 2 :(得分:0)

您不能像这样。如果要访问项目的使用属性。然后按照我的要求检查以下步骤。

Category.php模型

public function project(){
    return $this->belongsTo('App\Project','project_id','id');
}

Property.php模型,这里您做错了。您可以直接访问它,您必须首先与类别建立关系,然后从类别中获取项目。

  

属性属于类别

public function categories(){
    return $this->belongsTo('App\Category','category_id','id');
}

现在,如果要从控制器访问它,则可以使用with();

$property = Property::with('categories.project')->first();

在这里您会得到$property->categories->project->name

注意::如果您想从项目中获取属性,则可以使用hasOneThrough,但不能建立逆向关系。