在 laravel 中使用 IFNULL

Posted

技术标签:

【中文标题】在 laravel 中使用 IFNULL【英文标题】:use IFNULL in laravel 【发布时间】:2016-07-09 06:13:25 【问题描述】:

我在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();

当表中没有相关条目时,只有一个问题is_download 为空。经过一番研究,我发现有一个函数 IFNULL 通过使用它我可以将 is_download null 更改为 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',  IFNULL( `downloads`.`is_download` , 0 ) )
        ->orderBy('subjectID')
        ->get();

我可以在我的 phpmyadmin 中编写此查询,但不知道如何在 laravel 中编写

这是api,所以整个代码看起来像

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

【问题讨论】:

【参考方案1】:

试试这样:

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

【讨论】:

空白屏幕。没有变化。 您是否使用 \DB::table() 而不是 $app->db->table() 和 \DB::Raw() ?这应该可以正常工作。否则在 laravel 中使用时再次检查查询。 在 laravel 文档中,我没有看到这样的东西。所以,最好使用 DB::table()。【参考方案2】:

你只需要这样使用,

DB::raw('IFNULL( downloads.is_download, 0) as is_download')

【讨论】:

这在我的情况下帮助了我谢谢我有一个场景需要这种情况下另一个其他选择,例如 $colArray = [ 'column1' , 'otherColumn' ,DB::raw('IFNULL( 下载.is_download, 0) as is_download') ];【参考方案3】:

这是我的代码

->whereRaw('customer_id = IFNULL(?, customer_id)', [$request->customer_id])

【讨论】:

以上是关于在 laravel 中使用 IFNULL的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用外部类

如何在 Laravel 外部的包中使用 Laravel 外观(缓存、日志、存储)

Laravel - 如何在本地开发中使用 https 服务 laravel 项目

在 laravel 4.2 中,用户 'root'@'localhost' 的 Laravel 访问被拒绝(使用密码:YES)

使用 Laravel Lighthouse 在 Laravel 7 中出现 CORS 错误

如何在 Laravel 5.7 和 Laravel Collective 中使用动作 [重复]