Возьмите в качестве примера следующий красноречивый код:
Customers::with('ShippingMode')
->with('PaymentMethod')
->with('BarCodes')
->where(function($query) use ($find)
{
$query->where('name', 'like', "%$find%")
->orWhere('vat_number', 'like', "%$find%");
});
Теперь я хотел бы добавить больше orWhere
условий, но с учетом таблицы PaymentMethod
, например:
Customers::with('ShippingMode')
->with('PaymentMethod')
->with('BarCodes')
->where(function($query) use ($find)
{
$query->where('name', 'like', "%$find%")
->orWhere('vat_number', 'like', "%$find%")
->orWhere('PaymentMethod.description', 'like', "%$find%");
});
Но это не работает, так как возвращает ошибку:
Столбец не найден: 1054 Неизвестный столбец 'PaymentMethod.descricao' в 'выражении where'
Я знаю, что если я использую старые объединения, это прекрасно работает:
Customers::select('customer.*')
->from('customers AS customer')
->leftJoin('payment_methods AS payment_method', 'payment_method.id', '=', 'customer.payment_method_id')
->where(function($query) use ($find)
{
$query->where('name', 'like', "%$find%")
->orWhere('vat_number', 'like', '%$find%')
->orWhere('payment_method.description', 'like', '%$find%');
});
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ : переменная $find
может быть пустой, и когда она пуста, она возвращает все результаты без применения фильтра, что означает, что я не могу использовать функцию whereHas
.