2016-03-22 37 views
6

Tôi có truy vấn trong laravel đang hoạt động tốt.sử dụng IFNULL trong 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(); 

Chỉ có một vấn đề là is_download không có giá trị khi không có mục nhập tương đối trong bảng. Sau khi một số nghiên cứu tôi thấy rằng có một chức năng IFNULL bằng cách sử dụng mà tôi có thể thay đổi is_downloadnull đến 0. Vì vậy, đây là truy vấn của tôi mà không phải là làm việc. Màn hình trống đang hiển thị.

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

tôi có thể viết truy vấn này trong phpmyadmin của tôi, nhưng không biết làm thế nào để viết trong laravel

Đây là api, Vì vậy, toàn bộ mã trông giống như

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 
    ])); 
}); 

Trả lời

3

Hãy thử như thế này:

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

màn hình trống. không thay đổi. –

+0

Bạn đã sử dụng \ DB :: table() thay vì $ app-> db-> table() và \ DB :: Raw()? Điều này sẽ làm việc tốt. Nếu không, hãy kiểm tra lại truy vấn của bạn khi bạn đang sử dụng nó trong laravel. –

+0

có gì sai khi sử dụng '$ app-> db-> table()'? –

Các vấn đề liên quan