First query:
$orders = OrderModel::when($request->has("orderStartDate"), function ($query, $role) use ($request) {
return $query->where("DeliveryDate", ">=", $request->orderStartDate);
})->whereExists(function ($query) use ($request) {
$query->select('orders.*')
->from('orderrecipients')
->join('users', 'users.Id', '=', 'orderrecipients.Users_Id')
->whereRaw('orders.Id = orderrecipients.Orders_Id')
->where('users.Country_Id', $request->country);
})->get();
Second query:
$orders = OrderModel::where(function ($query) {
if($request->has("orderStartDate")) {
$query->where("DeliveryDate", ">=", $request->orderStartDate);
}
})->whereExists(function ($query) use ($request) {
$query->select('orders.*')
->from('orderrecipients')
->join('users', 'users.Id', '=', 'orderrecipients.Users_Id')
->whereRaw('orders.Id = orderrecipients.Orders_Id')
->where('users.Country_Id', $request->country);
})->get();
Third query:
$orders = OrderModel::where(function ($query) {
if($request->has("orderStartDate")) {
$query->where("DeliveryDate", ">=", $request->orderStartDate);
}
if ($request->has("country")) {
$query->select('orders.*')
->from('orderrecipients')
->join('users', 'users.Id', '=', 'orderrecipients.Users_Id')
->whereRaw('orders.Id = orderrecipients.Orders_Id')
->where('users.Country_Id', $request->country);
}
})->get();
At third query I am not confident, that INNER JOIN should be placed in WHERE conditional, perhaps ORM builder knows sequence to join right these query parts
Their nomenclature looks similar, but suspect result query is differ and ORM builder spends different executing time to build mentioned above queries.
Scope of these queries is to get rows from orders table where exist rows in table orderrecipients joined with table users with condition WHERE that was applied to users table.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire