Laravel where if 语句

Fro*_*oxz 6 php mysql laravel eloquent

我遇到了从数据库中选择的问题。基本上我想要实现的是:我有一个包含 3 列的表格

type | number | date
Run Code Online (Sandbox Code Playgroud)

我需要根据列(类型)做 where

If(type = 1) then where number > 1 else where date today()
Run Code Online (Sandbox Code Playgroud)

因此,如果 type 等于 1,则应用到 number 的位置,否则应用到 date 的位置。有可能这样做吗?用 Laravel Eloquent 可以做到吗?谢谢你。

原始查询和数据类型是: type = string number = integer date = timestamp (Y-m-d H:i:s)

询问

SELECT * FROM table_name WHERE CASE WHEN type=days THEN date>now() ELSE number>0 END

表架构 CREATE TABLE banners ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, type varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', number int(10) unsigned NOT NULL DEFAULT '0', finish_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (ID) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

有效的解决方案:

select * from `banners` 
where `banners`.`block_id` = 1 and `banners`.`block_id` is not null 
and IF (`type` = 'days', `finish_at` > now(), `number` > 0)
Run Code Online (Sandbox Code Playgroud)

Laravel 方式:

ParentModel::banners()->whereRaw("IF (`type` = 'days', `finish_at` > now(), `number` > 0)")->get();
Run Code Online (Sandbox Code Playgroud)

Nar*_*dia 6

你可以像这样使用它

SELECT * FROM tablename WHERE IF (`type` = 1, `number` > 1,`date` = today())
Run Code Online (Sandbox Code Playgroud)

使用 Laravel Eloquent 你可以像这样使用它

ModelName::whereRaw('IF (`type` = 1, `number` > 1,`date` = today())')->get();
Run Code Online (Sandbox Code Playgroud)