Laravel 5.2:获取属于多个模型的模型
Laravel 5.2: get models belonging to multiple models
我有两个 table 和一个枢轴 table:
Table1: products
id
name
Table2: categories
id
name
parent
Pivot table: product_categories
product_id
category_id
Relationship between them is:
product belongsToMany category (trough product_categories)
category belongsToMany product (trough product_categories)
如果它的主要类别,则父级为 0,否则是表示其他类别 ID 的整数。我有一个类别 ID,它可能有也可能没有子类别,可能是 0 或更多。
我需要属于该类别及其子类别的产品列表。 (如果没有选择类别,那么简单:需要列出所有产品)
目前我有一个数组(或集合)中类别的 id 列表:
$w = [];
$w['parent'] = (!empty($id)?$id:0);
$categories = Category::where('id', $w['parent'])->orWhere($w)->get()->toArray();
我怎样才能优雅地做到这一点?如有任何帮助,我们将不胜感激。
我终于得到了答案,这是我解决的方法:
$category_ids = Category::where('user_id', $user->id)->where('id', $id)->orWhere(['parent'=>$id])->pluck('id')->toArray();
$category_ids = array_unique($category_ids);
$product_ids = ProductCategory::whereIn('category_id', $category_ids)->pluck('product_id')->toArray();
$product_ids = array_unique($product_ids);
$products = Product::where('user_id', $user->id)->whereIn('id', $product_ids)->paginate(12);
只要类别最多有 2 个级别,这就有效。
您可以将 oneToMany 关系添加到类别模型:
public function subcategories()
{
return $this->hasMany('\App\Category', 'parent_id');
}
我有两个 table 和一个枢轴 table:
Table1: products
id
name
Table2: categories
id
name
parent
Pivot table: product_categories
product_id
category_id
Relationship between them is:
product belongsToMany category (trough product_categories)
category belongsToMany product (trough product_categories)
如果它的主要类别,则父级为 0,否则是表示其他类别 ID 的整数。我有一个类别 ID,它可能有也可能没有子类别,可能是 0 或更多。
我需要属于该类别及其子类别的产品列表。 (如果没有选择类别,那么简单:需要列出所有产品)
目前我有一个数组(或集合)中类别的 id 列表:
$w = [];
$w['parent'] = (!empty($id)?$id:0);
$categories = Category::where('id', $w['parent'])->orWhere($w)->get()->toArray();
我怎样才能优雅地做到这一点?如有任何帮助,我们将不胜感激。
我终于得到了答案,这是我解决的方法:
$category_ids = Category::where('user_id', $user->id)->where('id', $id)->orWhere(['parent'=>$id])->pluck('id')->toArray();
$category_ids = array_unique($category_ids);
$product_ids = ProductCategory::whereIn('category_id', $category_ids)->pluck('product_id')->toArray();
$product_ids = array_unique($product_ids);
$products = Product::where('user_id', $user->id)->whereIn('id', $product_ids)->paginate(12);
只要类别最多有 2 个级别,这就有效。
您可以将 oneToMany 关系添加到类别模型:
public function subcategories()
{
return $this->hasMany('\App\Category', 'parent_id');
}