获取数据收集Laravel雄辩的说法

时间:2018-07-19 14:36:41

标签: laravel eloquent laravel-5.6

我在数据库中有四个表,每个表都有一个雄辩的模型。表格为:enter image description here

如何从一个items中检索category并为每个itemProperties获取item的集合,以便在item时没有所有category具有的> properties ,集合中其余的属性存在,这些属性的值是空字符串还是类似的东西?

例如:

在表类别中,我有条目

在表 category_properties 中,我有条目

  • 眼睛的颜色

  • 尾巴长度

  • 耳朵的形状

在表中,我有条目

  • 加菲猫

并且在 item_properties 中,我只有一个条目

  • 绿色

项目表中的加菲猫 category_properties 中的眼睛的颜色有关。

如何获取[ Garfield => [ 'color of eyes' => 'green', 'length of tail' => ' ', 'shape of ears' => ' ']]而不是[Garfield => [ 'color of eyes' => 'green']]

我可以通过联接表item_properties和category_properties轻松地在mysql中获得预期的结果,但是我不知道如何对Eloquent和Laravel集合执行相同的操作。

雄辩中是否有类似于sql join的东西?

1 个答案:

答案 0 :(得分:1)

您的描述有点难以理解。我假设您正尝试从items的{​​{1}}中获得item_properties?最好避免在Laravel中使用category,而改为使用raw joins

现在,您的每个Model都会创建一个关系(口才关系)。

  

https://laravel.com/docs/5.6/eloquent-relationships

然后您可以使用Model

  

https://laravel.com/docs/5.6/eloquent-relationships#eager-loading


希望您已阅读我发送给您的链接。

示例:

类别模型:

Eager Loading

项目模型:

public function items(){
  return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
  return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}

ItemProperty模型:

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

public function itemProperties(){
  return $this->hasMany('App\ItemProperty', 'item_id', 'id');
}

类别属性模型:

  public function items(){
      return $this->belongsTo('App\Item', 'item_id', 'id');    
}

public function categoryProperties(){
      return $this->belongsTo('App\CategoryProperty', 'property_id', 'id');
    }

控制器:

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