Laravel 收集数据拉威尔提出了令人信服的质疑
我在数据库中有四个表,每个表有一个雄辩的模型。表格如下: 如何从一个Laravel 收集数据拉威尔提出了令人信服的质疑,laravel,eloquent,laravel-5.6,Laravel,Eloquent,Laravel 5.6,我在数据库中有四个表,每个表有一个雄辩的模型。表格如下: 如何从一个类别中检索项目,并为每个项目获取项目属性的集合,以便项目不具有类别所具有的所有属性,其余的属性存在于集合中,该属性的值是空字符串还是类似的 例如: 在表类别中,我有一个条目 猫 在表category_properties中,我有一些条目 眼睛的颜色 尾长 耳朵形状 在表项中我有一个条目 加菲猫 在item_属性中,我只有一个条目 绿色的 与项目表中的加菲猫相关,与类别属性中的眼睛颜色相关 如何获得[Garfiel
类别
中检索项目
,并为每个项目
获取项目属性的集合,以便项目
不具有类别
所具有的所有属性,其余的属性存在于集合中,该属性的值是空字符串还是类似的
例如:
在表类别中,我有一个条目
- 猫
在表category_properties中,我有一些条目
- 眼睛的颜色
- 尾长
- 耳朵形状
在表项中我有一个条目
- 加菲猫
在item_属性中,我只有一个条目
- 绿色的
与项目表中的加菲猫相关,与类别属性中的眼睛颜色相关
如何获得[Garfield=>['眼睛颜色'=>'绿色','尾巴长度'=>'','耳朵形状'=>'']
,而不是[Garfield=>['眼睛颜色'=>'绿色]
通过连接表item_属性和category_属性,我可以很容易地在mysql中获得预期的结果,但我不知道如何在Elount和Laravel集合中实现同样的效果
《雄辩》中是否有类似于sql join的内容?您的描述有点难以理解。我假设您正试图从类别
获取具有项目属性的项目
?最好避免在Laravel中使用原始联接
,而使用模型
现在,您的每个模型
都创建了一种关系(雄辩的关系)
然后您可以使用快速加载
我希望你已经阅读了我发给你的链接
例如:
类别模型:
public function items(){
return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}
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');
}
$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
项目型号:
public function items(){
return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}
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');
}
$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
项目属性模型:
public function items(){
return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}
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');
}
$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
类别属性模型:
public function items(){
return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}
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');
}
$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
控制器:
public function items(){
return $this->hasMany('App\Item', 'category_id', 'id');
}
public function categoryProperties(){
return $this->belongsTo('App\CategoryProperty', 'category_id', 'id');
}
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');
}
$data = Item::with(['categories.categoryProperties','categories.categoryProperties.itemProperties'])->get();
检查连接:我已经在使用雄辩的模型。我同意这个问题相当令人困惑,所以我添加了一个我想要实现的简化示例。结果如何?我决定不使用Eloquent来检索数据,而是使用query builder,我得到了更适合在html表中打印的数据。稍后我将添加解决方案作为答案。好的,很高兴听到。对于将来的参考,一旦数据中有大量数据,添加联接会减慢查询速度(嗯,duuh),最好使用模型的关系。一开始可能会有所不同,但它需要不断的实践。你有渴望加载,你可以限制它只有特定的值等。祝你好运!