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),最好使用模型的关系。一开始可能会有所不同,但它需要不断的实践。你有渴望加载,你可以限制它只有特定的值等。祝你好运!