Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel where if语句_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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是什么?您没有在问题中指定它这是我的数据,类型是字符串,如果只接受整数?请明确指定您的条件。你想要实现什么,你在这里使用了什么变量,也在这里发布了你克服的原始错误,更新了我的问题。非常感谢。