/ / लार्वा लूप में सशर्त चयन कथन - लार्वा, लार्वा -4, एलोक्वेंट

लारवेल eloquent में लैंडवेल, लार्वेल -4, भाषण में सशर्त चयन वक्तव्य

मेरे पास एक कच्चा प्रश्न है

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

अब मैं इस क्वेरी को कैसे बदल सकता हूं laravel eloquent ORM

उत्तर:

जवाब के लिए 0 № 1
DB::table("users")->select("IF(`user_group` = "1", `total_score`, `score`)")->get();

यह काम करेगा


जवाब के लिए 0 № 2

कन्वर्ट MYSQL मामले लारावल क्वेरी

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

और बस इस क्वेरी को निष्पादित करें

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

या

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

आपको परिणाम मिलेगा।


जवाब के लिए 0 № 3

यदि आपको सशर्त शामिल होने और चयन करने की आवश्यकता है तो लागू:

Mysql की मूल स्थिति का उपयोग करना एक अच्छा तरीका हो सकता है। आप ऐसी स्थिति में हो सकते हैं जहां यदि PHP में कोई विशेष स्थिति सत्य है तो आपको उस तालिका में शामिल होने की आवश्यकता है अन्यथा सम्मिलित न हों।

उदाहरण के लिए :

यदि $ logInUser व्यवस्थापक है, तो आप छात्र उपस्थिति प्राप्त करना चाहते हैं अन्यथा केवल निशान दिखाएं।

आपके पास हो सकता है (नीचे PS केवल संदर्भ के लिए एक छद्म कोड है):

<?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();

?>

यदि आप इस तरह से करने की कोशिश करते हैं:

<?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
");
?>

तब आपको उपस्थिति दर्ज करनी होगी, तब भी जब आप जानते हैं कि स्थिति झूठी है क्योंकि अन्यथा इसमें "अज्ञात कॉलम उपस्थिति" महत्वपूर्ण "त्रुटि" होगी।

मेरे दृष्टिकोण से, अगर हम जानते हैं कि हम नहीं चाहते हैंविशेष कॉलम, मैं सिर्फ उस तालिका में शामिल नहीं होगा। यदि आप कच्ची क्वेरी के ऊपर एक EXPLAIN करते हैं, तो आप पाएंगे कि MySQL को उपस्थिति तालिका की आवश्यकता होगी, भले ही चयन में स्थिति गलत हो।

यदि आपको यह गलत लगे या कोई बेहतर सुझाव मिले तो कृपया बेझिझक टिप्पणी करें।