我知道以下错误来自何处,但我不知道如何修复它。
错误:
SQLSTATE [42S22]:找不到列:1054'where子句'中的未知列'expenses.date'(SQL:选择count(*)作为来自
expenses_sections
的聚合expenses
。{{ 1}} LIKE%2015-12%)
导致它的原因(在我的控制器中):
date
我有一个用于更改页面布局的选择菜单。我有另一个选择菜单,我用它来显示某个月的结果。当我选择一个月时,上面的错误是我得到的,因为查询在错误的表中查找(因为上面的代码)。使用费用和部分之间的关系显示结果。我基本上想要的是在if($view === 'section') {
$query = Section::query();
$query->with(['expenses' => function($query) use ($search){
$query->where('date', 'LIKE', '%2015-' . $search . '%')->get();
}]);
}
表而不是expenses
表中搜索结果而不破坏关系,因为基于关系,我的布局正在显示。
费用模型:
expenses_sections
部分模型:
class Expense extends Model
{
public function section()
{
return $this->belongsTo('App\Http\Models\Expenses\Section');
}
}
答案 0 :(得分:1)
查询约束应始终返回查询构建器实例。你不应该在你的闭包中调用get
,所以尝试修复它:
$query = Section::query();
$query->with(['expenses' => function($query) use ($search) {
$query->where('date', 'LIKE', '%2015-' . $search . '%');
}]);
这将获取所有部分并急切加载关系。那些不适合约束的人只会有一个空的expenses
关系。如果您只想要符合约束条件的部分,那么您应该使用whereHas
方法。
$query = Section::query();
$query->with('expenses')->whereHas('expenses', function($query) use ($search) {
$query->where('date', 'LIKE', '%2015-' . $search . '%');
});