Я знаю, откуда исходит следующая ошибка, но я не знаю, как ее исправить.
Ошибка:
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «cost.date» в «предложении where» (SQL: выбрать количество (*) в качестве агрегата из
expenses_sections
гдеexpenses
,date
НРАВИТСЯ% 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');
}
}
Ограничения запроса всегда должны возвращать экземпляр построителя запросов. Вы не должны звонить 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 . '%');
});
Других решений пока нет …