【发布时间】:2015-12-02 15:44:05
【问题描述】:
我知道以下错误来自哪里,但我不知道如何解决它。
错误:
SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列'expenses.date'(SQL:从
expenses_sections中选择计数(*)作为聚合,其中expenses.dateLIKE %2015 -12%)
是什么导致它(在我的控制器中):
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');
}
}
截面模型:
class Section extends Model
{
public function expenses()
{
return $this->hasMany('App\Http\Models\Expenses\Expense');
}
}
【问题讨论】:
-
expense有date字段吗? -
如果你有有 costs_id 和 section_id 的 costs_sections,你应该使用 hasManyThrough(),但我总是很难让这些第一次工作,所以而不是我试图回答它,阅读这个等待更好的回复:laravel.com/docs/5.1/eloquent-relationships#has-many-through
-
太棒了,当然最好自己阅读而不是得到我可以立即使用的答案,所以我谢谢你! :)
-
@RonBrouwers - 实际上我可能错了。看看上面关于数据透视表的部分。我想我现在应该去睡觉了……
-
我知道数据透视表,但我还没有检查过 hasManyThrough,所以无论哪种方式我都会学到一些东西,这是我的最终目标:)
标签: php laravel search relation