// This comes in as an array - item_category[]
$category = \Request::input('item_category');
Item::with('category')
->when($category, function($q) use ($category) {
$q->whereHas('category', function($q) use ($category) {
$q->whereIn('category', $category);
});
})->get();
您好,我正在尝试检索类别等于通过的任何类别的所有项目。但是,类别是过滤器,用户可能会也可能不会检查此类,因此将when子句链接到模型。代码当前抛出错误
Column not found: 1054 Unknown column 'has' in 'where clause' (SQL: select * from `items` where `has` = category)
如果我这样做
Item::with('category')
->whereHas('category', function($q) use ($category) {
$q->whereIn('category', $category);
})->get();
这将起作用,除非用户没有检查任何item_category复选框,否则查询将返回0结果,因为它期望此值通过。 我真的不知道这里做了什么。任何建议。 的问候,
项目表
id category_id title description price timestamps
类别表
id category
Item.php
public function category()
{
return $this->belongsTo('App\Category', 'category_id');
}
答案 0 :(得分:0)
Laravel似乎将您的嵌套whereHas(...)
解释为where('has', ...)
而不是您想要的。我不知道为什么,但我猜这是子条款的工作方式。
你可以做的是首先创建基本查询,然后自己进行检查并对其进行扩充,如下所示:
$category = \Request::input('item_category');
$query = Item::with('category');
if ($category) {
$query->whereHas('category', function($q) use ($category) {
$q->whereIn('category', $category);
});
}
$results = $query->get();
虽然不应该是category_id而不是category?