Php 从父母那里得到所有的孩子模型多对多关系拉威尔口若悬河
我正在建立一个电子商务网站使用拉威尔5.8,并有以下问题。我希望从一个类别及其子类别中检索所有产品,但能够在代码中执行过滤查询。例如,产品的价格限制和数量可用性 商店有类别,在同一个表中有子类别。 类别表(简化)id | name | parent_id-其中if parent_id!=0,则该类别被视为主类别的子类别 产品可以在多个类别中,因此我使用多对多关系。 产品表(简化)id |名称… 产品类别表-id |产品| id |类别| id 我的产品型号如下所示:Php 从父母那里得到所有的孩子模型多对多关系拉威尔口若悬河,php,laravel,eloquent,eloquent-relationship,Php,Laravel,Eloquent,Eloquent Relationship,我正在建立一个电子商务网站使用拉威尔5.8,并有以下问题。我希望从一个类别及其子类别中检索所有产品,但能够在代码中执行过滤查询。例如,产品的价格限制和数量可用性 商店有类别,在同一个表中有子类别。 类别表(简化)id | name | parent_id-其中if parent_id!=0,则该类别被视为主类别的子类别 产品可以在多个类别中,因此我使用多对多关系。 产品表(简化)id |名称… 产品类别表-id |产品| id |类别| id 我的产品型号如下所示: public functio
public function categories()
{
return $this->belongsToMany(
'App\CatalogCategory',
'catalog_product_categories',
'product_id',
'category_id'
);
}
和我的分类模型:
public function allProducts()
{
return $this->belongsToMany(
'App\CatalogProduct',
'catalog_product_categories',
'category_id',
'product_id'
)
->where('is_active', 1)
->whereDate('active_from', '<=', Carbon::now('Europe/Sofia'))
->where(function ($query)
{
$query->whereDate('active_to', '>=', Carbon::now('Europe/Sofia'))
->orWhereNull('active_to');
})
->wherePivotIn('category_id', $this->allChildrenIds());;
}
好的,我想问题是
->wherePivotIn('category_id',$this->allChildrenIds())
您正在尝试获取某个类别的产品-可以通过pivot表中的一行来标识相应的记录,该行具有该类别的id和各种其他产品的id
但是wherePivotIn在$this->allChildrenIds()
中不包含当前类别的id,因此不会返回任何记录
定义不带wherePivotIn的关系
公共功能所有产品()
{
返回$this->belongtomany(
“应用程序\目录产品”,
“目录产品类别”,
“类别_id”,
“产品标识”
)
->其中('is_active',1)
->其中日期('active_from','=',Carbon::now('Europe/Sofia'))
->或wherenull('active_to');
});
}
然后获取当前类别及其所有子类别的所有产品
$category=category::with(['products','subcategories.products'])->get();
通过此查询,与子类别关联的产品将分别嵌套在每个子类别下。定义的关系命名为
products
,因此应作为$category->products进行访问代码>-不是所有的产品都很糟糕,没有正确复制。我已经编辑过了。这是可行的,但是有没有办法通过一些查询将所有产品放在一个集合中?我需要有能力查询产品的价格范围,并获得计数聚合一个简单的方法,以获得所有产品在一个单一的集合将作出两个查询:首先查询所有类别与子类别和提取id的。在第二次查询中使用这些id来获取类别id在id数组中的所有产品,然后您可以附加价格范围的其他where条件
$category = CatalogCategory::find(3);
dd($category->allProducts);