#php #laravel #eloquent
#php #laravel #красноречивый
Вопрос:
Я новичок в laravel и пытаюсь написать запрос, в котором для получения соответствующего результата передается выбранный stock->OrderProduct->product_id. Запрос выглядит следующим образом :
$stock = Stock::where('orderProductid.product_id', $pharmacyEvent->prescription->product_id)
->whereHas('orderProduct.product.prices')
->with(['orderProduct.product.price' => function ($query) use ($paymentMode) {
$query->where('scheme_id', $paymentMode->scheme_id);
}])->first();
$price = $stock->orderProduct->product->price;
Это не работает, так как это плохая практика, и я переписал запрос, как показано ниже, что приводит к неправильным результатам.
$stock = Stock::whereHas('orderProduct.product.prices')
->with([
'orderProduct.product' => function ($query) {
$query->where('id', $pharmacyEvent->prescription->product_id);
},
'orderProduct.product.price' => function($query) {
$query->where('scheme_id', $paymentMode->scheme_id);
}
])->first();
Любые рекомендации по использованию красноречивых методов, когда я хочу передать условие, основанное на отношениях в запросе, будут высоко оценены. Я использую lavel 5.8
Ответ №1:
Я использовал whereHas :
$stock = Stock::whereHas('orderProduct.product', function($query) use ($pharmacyEvent) {
$query->where('id', $pharmacyEvent->prescription->product_id);
})
// ->whereHas('orderProduct.product.prices')
->with(['orderProduct.product.price' => function ($query) use ($paymentMode) {
$query->where('scheme_id', $paymentMode->scheme_id);
}])->first();
$price = $stock->orderProduct->product->price;