Php Laravel where if语句
我遇到了一个问题,选择从数据库。 基本上,我想要实现的是: 我有一张三栏的桌子Php Laravel where if语句,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我遇到了一个问题,选择从数据库。 基本上,我想要实现的是: 我有一张三栏的桌子 type | number | date 我需要根据列(类型)在何处执行操作 所以,如果type等于1,则应用where to number,否则应用where to date。有可能这样想吗?有没有可能用拉威尔的口才做到这一点? 多谢各位 原始查询和数据类型为: type=string 数字=整数 日期=时间戳(Y-m-d H:i:s) 质疑 从表名称中选择* 当type=days然后date>now()或num
type | number | date
我需要根据列(类型)在何处执行操作
所以,如果type等于1,则应用where to number,否则应用where to date。有可能这样想吗?有没有可能用拉威尔的口才做到这一点?
多谢各位
原始查询和数据类型为:
type=string
数字=整数
日期=时间戳(Y-m-d H:i:s)
质疑
从表名称中选择*
当type=days然后date>now()或number>0结束时的情况
表模式
创建表格横幅(
id bigint(20)无符号非空自动增量,
键入varchar(255)COLLATE utf8\U unicode\U ci NOT NULL默认值“0”,
数字int(10)无符号非空默认值“0”,
在时间戳非空时完成\u默认值“0000-00-00:00:00”,
主键(
id)
)ENGINE=InnoDB AUTO_INCREMENT=12默认字符集=utf8 COLLATE=utf8\U unicode\U 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)
拉维路:
ParentModel::banners()->whereRaw("IF (`type` = 'days', `finish_at` > now(), `number` > 0)")->get();
对此,您应该使用案例
SELECT * FROM tablename
WHERE CASE WHEN type = 1 THEN number > 1 ELSE date = today() END
您可以通过这种方式使用Laravel的雄辩,不必在单行中进行方法链接
编辑:第一个问题我没有答对。现在问题已经解决了,假设你有一个动态的“type”语句也可以使用它
编辑2:您可以根据if条件将字段表示为文字,然后将其传递到where子句。尝试以下操作:
$query = SomeModel::where(function($query){
$query->where(function($query){
$query->where('type',1)->where('number',1)
})
->orWhere(function($query){
$query->where('type',1)->where('date', today())
})
})
我们使用orWhere来解决这个问题。如果需要的话,还需要一个where-wrapp-out-of-where-where-where来说明另一个条件
如果您使用的是MySQL,请尝试使用DB::raw和用例,其中:
您可以像使用
SELECT * FROM tablename WHERE IF (`type` = 1, `number` > 1,`date` = today())
ModelName::whereRaw('IF (`type` = 1, `number` > 1,`date` = today())')->get();
使用Laravel Elount,您可以像使用
SELECT * FROM tablename WHERE IF (`type` = 1, `number` > 1,`date` = today())
ModelName::whereRaw('IF (`type` = 1, `number` > 1,`date` = today())')->get();
您从何处获得变量$type?我想你没有得到这个问题,这是我需要的,但是MySQL给出了错误,你的SQL语法有错误WHERE CASE WHEN type=days然后在>1处完成\u,否则左>0结束
@PoWeR将进行检查并更新答案。很好的解决方案,但我无法使用,或者我需要您使用的DBMS的确切位置?@PoWeR如果您使用的是MySQL,请查看数据库原始查询。在可能有帮助的地方使用Case。MySQL我会看看你的SQL语法有错误<代码>第3行的WHERE IF(type=days,finish_at>now(),left>0)
这里的days是什么?您没有在问题中指定它这是我的数据,类型是字符串,如果只接受整数?请明确指定您的条件。你想要实现什么,你在这里使用了什么变量,也在这里发布了你克服的原始错误,更新了我的问题。非常感谢。