Laravel 9 Query Builder如何转换含OR与IS NULL的SQL查询?
Laravel 9 Query Builder 转换实现
对应你给出的SQL,转换后的Query Builder写法如下:
use Illuminate\Support\Facades\DB; $results = DB::table('beds') ->select( 'ruangans.nama_ruangan', 'beds.id AS idBed', 'beds.nomor_bed', 'pasiens.nama', 'pasiens.status' ) ->join('ruangans', 'beds.id_ruangan', '=', 'ruangans.id') ->leftJoin('pasiens', 'beds.id', '=', 'pasiens.id_bed') ->where(function ($query) { $query->where('pasiens.status', '!=', 'Sudah Rawat Inap') ->orWhereNull('pasiens.status'); }) ->get();
关键部分说明:
- JOIN 处理:
join()对应原SQL的内连接,leftJoin()对应左连接,参数依次是关联表名、关联字段的对应关系。 - OR 与 IS NULL 处理:用闭包包裹两个条件,确保这两个条件是OR的逻辑关系:
where('pasiens.status', '!=', 'Sudah Rawat Inap')对应pasiens.status != 'Sudah Rawat Inap'orWhereNull('pasiens.status')直接对应pasiens.status IS NULL
用闭包包裹是为了避免后续添加其他条件时逻辑混乱,这是Laravel处理多条件组的标准写法。
如果你的项目中已经定义了对应的模型(比如Bed、Ruangan、Pasien),也可以通过Eloquent关联来实现,但上述写法是最直接对应原SQL的Query Builder实现。
内容的提问来源于stack exchange,提问作者Febryan Akhdani
相关产品推荐
相关产品推荐

