从Laravel中属于一个类别的产品中选择所有过滤器

时间:2016-06-15 17:45:37

标签: php laravel model eloquent relationships

我有这些表格:

  • 分类
  • 产品
  • 过滤
  • Product_filter

类别 - >线 - >产品 - >过滤

一个产品有很多过滤器

一种产品有一个类别和一行

我需要为一个类别获取所有过滤器。 今天,通过表格之间的关系,我可以从一个产品中获取所有类别的产品和所有过滤器:

// All the products
$category->products

// All the filters
$product->filters

//or
$category->products->first()->filters

现在,我需要按类别获取过滤器,例如:

$category->filters
// or
$category->products->filters

小简报:

  • 某个类别包含具有过滤器的产品

如何按类别获取所有过滤器?

2 个答案:

答案 0 :(得分:3)

public function filters() { return Filter ::join('filter_product', 'filter.id', '=', 'filter_product.filter_id') ->join('products', 'filter_product.product_id', '=', 'products.id') ->join('categories', 'products.category_id', '=', 'categories.id') ->where('categories.id', $this->id); } public function getFiltersAttribute() { if (!$this->relationLoaded('products') || !$this->products->first()->relationLoaded('filters')) { $this->load('products.filters'); } return collect($this->products->lists('filters'))->collapse()->unique(); } 模型中:

$category->filters

然后你就可以像这样使用它:

filter

要保证唯一的id结果,您需要传递唯一字段,例如。 return collect($this->products->lists('filters'))->collapse()->unique('id');

@echo off

set /p server=What server is being restarted?
set /p setTime=What time?

PowerShell.exe "& 'c:\users\%username%\Desktop\dotComEmails\xServerIsDown.ps1' '%server%' '%setTime%'"

答案 1 :(得分:0)

如果我理解正确,你需要with子句:

$category->with(products.filters)->get()