2016-03-22 11 views
6

Ich habe eine Abfrage in laravel, die gut funktioniert.Verwenden Sie IFNULL in Laravel

$subjects = $app->db->table('subjects')->LeftJoin('downloads', 'subjects.subjectID', '=', 'downloads.subject_id') 
     ->where('universityID', $currentUser->universityID)->where('semesterID', $currentUser->semesterID)->where('courseID', $currentUser->courseID) 
     ->select('subjects.subjectID', 'subjects.subjectName', 'subjects.price', 'downloads.is_download') 
     ->orderBy('subjectID') 
     ->get(); 

Es gibt nur ein Problem, dass is_download null kommt, wenn es keine relative Eintrag in der Tabelle ist. Nach einigen Recherchen habe ich festgestellt, dass es eine Funktion IFNULL gibt, mit der ich is_downloadnull zu 0 ändern kann. Also hier ist meine Abfrage, die nicht funktioniert. Der leere Bildschirm wird angezeigt.

$subjects = $app->db->table('subjects')->LeftJoin('downloads', 'subjects.subjectID', '=', 'downloads.subject_id') 
     ->where('universityID', $currentUser->universityID)->where('semesterID', $currentUser->semesterID)->where('courseID', $currentUser->courseID) 
     ->select('subjects.subjectID', 'subjects.subjectName', 'subjects.price', IFNULL(`downloads`.`is_download` , 0)) 
     ->orderBy('subjectID') 
     ->get(); 

ich in der Lage bin, diese Abfrage in meinem phpmyadmin zu schreiben, aber nicht wissen, wie in laravel

Dies ist die api, also ganze Code wie

sieht wie folgt aus
use Illuminate\Database\Query\Expression as raw; 
use project\Models\Subject; 
use project\Models\Semester; 
use project\Models\StudentRegistration; 

$app->get('/api/getSubject/:studentID', function($studentID) use ($app) { 
error_reporting(E_ALL); 
    $currentUser = StudentRegistration::where('studentID', $studentID)->first(); 

$subjects = $app->db->table('subjects')->LeftJoin('downloads', 'subjects.subjectID', '=', 'downloads.subject_id') 
     ->where('universityID', $currentUser->universityID)->where('semesterID', $currentUser->semesterID)->where('courseID', $currentUser->courseID) 
     ->select('subjects.subjectID', 'subjects.subjectName', 'subjects.price', IFNULL(`downloads`.`is_download` , 0)) 
     ->orderBy('subjectID') 
     ->get(); 
print_r($subjects); 
    return $app->response->write(json_encode([ 
       'error' => 0, 
       'subjects' => $subjects 
    ])); 
}); 

Antwort

3

Versuchen Sie schreiben:

DB::Raw('IFNULL(`downloads`.`is_download` , 0)'); 


$subjects = $app->db->table('subjects')->LeftJoin('downloads', 'subjects.subjectID', '=', 'downloads.subject_id') 
    ->where('universityID', $currentUser->universityID)->where('semesterID', $currentUser->semesterID)->where('courseID', $currentUser->courseID) 
    ->select('subjects.subjectID', 'subjects.subjectName', 'subjects.price', DB::Raw('IFNULL(`downloads`.`is_download` , 0)')) 
    ->orderBy('subjectID') 
    ->get(); 
+0

leerer Bildschirm. Keine Änderung. –

+0

Haben Sie \ DB :: table() anstelle von $ app-> db-> table() und \ DB :: Raw() verwendet? Dies sollte gut funktionieren. Andernfalls überprüfen Sie Ihre Abfrage erneut, wenn Sie sie in Laravel verwenden. –

+0

Was ist falsch bei der Verwendung von '$ app-> db-> table()'? –