從URL我得到$filter
,$month
或兩者。例如,當我只想顯示11月份的結果時,使用下面的代碼可以正常工作。但是,如果篩選器已設置,則它會顯示所有結果(也來自其他月份),如果篩選器已在數據庫中找到。Laravel顯示關係結果
我想要實現的是,如果在數據庫中找到設置的過濾器,則只顯示結果;如果設置了一個月,則僅顯示該特定月份的結果。
My Section和Expense模型分別擁有belongsTo和hasMany關係。
$query = Section::query();
如果過濾器已設置:
if ($filter !== 'false') {
$query->with(['expenses' => function ($query) use ($month) {
$query->where('date', 'LIKE', '%2015-' . Carbon::parse($month)->format('m') . '%');
}]);
}
如果一個月已設置:
if ($month !== 'false') {
$query->with(['expenses' => function ($query) use ($filter) {
$query->where('type', '=', $filter);
}]);
}
我也試過下面的代碼:
if ($filter !== 'false') {
$query->with('expenses')->whereHas('expenses', function($query) use ($filter) {
$query->where('type', '=', $filter);
});
}
if ($month !== 'false') {
$query->with('expenses')->whereHas('expenses', function($query) use ($month) {
$query->where('date', 'LIKE', '%2015-' . Carbon::parse($month)->format('m') . '%');
});
}
$expenses = $query->orderBy('section', 'asc')->paginate(25);
我在我看來,在$expenses
上使用foreach o顯示結果。
真棒,所以簡單的我很慚愧:) – Hardist