Функция поиска отношений Laravel

Я знаю, откуда исходит следующая ошибка, но я не знаю, как ее исправить.

Ошибка:

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');
}
}

0

Решение

Ограничения запроса всегда должны возвращать экземпляр построителя запросов. Вы не должны звонить 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 . '%');
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]