/ / Podmienené výberové vyhlásenie vo výmluvnom tvare - laravel, laravel-4, výmluvný

Podmienené výberové vyhlásenie v laravel elloquent - laravel, laravel-4, výrečný

Mám taký nespracovaný dotaz

SELECT IF(`user_group` = "1", `total_score`, `score`) FROM `user`

Teraz, ako môžem previesť tento dotaz v systéme Windows laravel eloquent ORM

odpovede:

0 pre odpoveď č. 1
DB::table("users")->select("IF(`user_group` = "1", `total_score`, `score`)")->get();

to bude fungovať


0 pre odpoveď č. 2

Preveďte MYSQL CASE do LARAVEL Query

$query = DB::raw("(CASE WHEN user_group="1" THEN "Admin" WHEN user_group="2" THEN "User" ELSE "Superadmin" END) as name");

a jednoducho vykonajte tento dotaz v

DB::table("tablename")->select($query)->get();

alebo

YourModelClass::select($query)->get();

Získate výsledok.


0 pre odpoveď č. 3

Použiteľné, ak potrebujete podmienečné pripojenie a vyberte:

Použitie natívnych podmienok mysql môže byť dobrým spôsobom. Možno sa nachádzate v situácii, keď je konkrétna podmienka v PHP veľmi náročná, musíte sa pripojiť k tejto tabuľke, inak sa nepripojte.

Napríklad :

Ak je $ logInUser správcom, chcete získať účasť študentov, inak iba zobrazte známky.

môžete mať (PS nižšie je pseudo kód len pre informáciu):

<?php

// Having the column selection only when a particular condition is true
// Else have its value as NULL(You can have NA also)
if($loggedInUser->role == "admin"){
$attendanceColumnSelect = DB::raw("attendance.total as total_attendance");
}
else{
$attendanceColumnSelect = DB::raw("NULL as total_attendance");
}
// Students query with joins which must be there always
$studentsQuery= Students::select("name", "class", "age", $attendanceColumnSelect)
->join("someothertable", "someothertable.student_id", "=", "student.id");

// Adding join of attendance only when required for admin role
if($loggedInUser->role == "admin"){
$studentsQuery->join("attendance", "attendance.student_id", "=", "student.id");
}
// Getting final data
$finalResult = $studentsQuery->get();

?>

Ak sa to pokúsite takto:

<?php

$finalResult = DB::select("
SELECT  students.name,
students.class,
students.age,
IF("$loggedInUser->role" = "admin", attendance.total, NULL) as total_attendance
FROM students
INNER JOIN someothertable on someothertable.student_id = student.id
INNER JOIN attendance on attendance.student_id = student.id
");
?>

Potom musíte mať účasť na dochádzke, aj keď viete, že podmienka je nepravdivá, pretože v opačnom prípade bude mať chybu „neznámy stĺpec dochádzka.total“.

Z môjho pohľadu, ak vieme, že nechcemev konkrétnom stĺpci by som sa k tejto tabuľke jednoducho nepripojil. Ak urobíte EXPLAIN na vyššie uvedený nespracovaný dotaz, zistíte, že MySQL bude potrebovať dochádzkovú tabuľku, aj keď je podmienka If pri výbere nepravdivá.

Ak zistíte, že je to nesprávny alebo nejaký lepší návrh, neváhajte sa vyjadriť.