我有问题,我有代码:
public function attribute()
{
return $this->hasMany('App\Models\ProductAttribute');
}
public function scopeAttrSearch($query, $ids)
{
foreach ($ids as $id) {
$query->whereHas('attribute', function ($q) use ($id) {
$q->where('attribute_value_id', $id);
});
}
return $query;
}
在id中,我从数据库发送values_attributes_id。我有名称为attribute_value的列表复选框。如果具有复选框列表,则选定的产品将按条件过滤。但是如果我从同一类别中选择checkboses,则过滤器通常不会过滤,似乎是有条件的“ where”无法正常工作。
答案 0 :(得分:0)
foreach不适用于查询,您可以简化代码:
public function scopeAttrSearch($query, $ids)
{
return $query->whereHas('attribute', function ($q) use ($ids) {
$q->whereIn('attribute_value_id', $ids);
});
}
答案 1 :(得分:0)
您可以直接将传入的数组传递给whereIn方法。
<ul>
<li class="nav-item">
<a class="nav-link" (click)="BEDropdownOpen = !BEDropdownOpen" [attr.aria-expanded]="BEDropdownOpen" aria-controls="basic-elements-dropdown" [ngClass]="{'active': rla.isActive}">
Elements
</a>
<div class="collapse" id="basic-elements-dropdown" [ngbCollapse]="!BEDropdownOpen">
<ul class="nav flex-column sub-menu">
<li class="nav-item">
<a class="nav-link" routerLink="/accordions" routerLinkActive="active" #rla="routerLinkActive">Accordion</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/typography" routerLinkActive="active" #rla="routerLinkActive" >Typography</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/tooltips" routerLinkActive="active" #rla="routerLinkActive">Tooltip</a>
</li>
</ul>
</div>
</li>
</ul>