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)
你可以像这样使用它
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)
| 归档时间: |
|
| 查看次数: |
21754 次 |
| 最近记录: |