Laravel 关系搜索功能
Laravel relation search function
我知道以下错误的来源,但我不知道如何解决。
错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expenses.date' in 'where clause' (SQL: select count(*) as aggregate from expenses_sections
where expenses
.date
LIKE %2015-12%)
是什么原因造成的(在我的控制器中):
if($view === 'section') {
$query = Section::query();
$query->with(['expenses' => function($query) use ($search){
$query->where('date', 'LIKE', '%2015-' . $search . '%')->get();
}]);
}
我有一个 select 菜单,我用它来更改页面的布局。我有另一个 select 菜单,我用它来显示特定月份的结果。上面的错误是我 select 一个月时得到的,因为查询查找错误 table (因为上面的代码)。使用费用和部分之间的关系显示结果。我基本上想要的是在 expenses
table 中搜索结果,而不是在 expenses_sections
table 中搜索结果,当然不会破坏关系,因为基于关系,我的布局正在显示。
费用模型:
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');
}
}
查询约束应始终 return 查询生成器实例。你不应该在你的闭包中调用 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 . '%');
});
我知道以下错误的来源,但我不知道如何解决。
错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expenses.date' in 'where clause' (SQL: select count(*) as aggregate from
expenses_sections
whereexpenses
.date
LIKE %2015-12%)
是什么原因造成的(在我的控制器中):
if($view === 'section') {
$query = Section::query();
$query->with(['expenses' => function($query) use ($search){
$query->where('date', 'LIKE', '%2015-' . $search . '%')->get();
}]);
}
我有一个 select 菜单,我用它来更改页面的布局。我有另一个 select 菜单,我用它来显示特定月份的结果。上面的错误是我 select 一个月时得到的,因为查询查找错误 table (因为上面的代码)。使用费用和部分之间的关系显示结果。我基本上想要的是在 expenses
table 中搜索结果,而不是在 expenses_sections
table 中搜索结果,当然不会破坏关系,因为基于关系,我的布局正在显示。
费用模型:
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');
}
}
查询约束应始终 return 查询生成器实例。你不应该在你的闭包中调用 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 . '%');
});