Laravel!=操作员在哪里不工作

时间:2014-04-24 04:57:23

标签: php mysql laravel-4

当期望一个对象时,此查询返回null。

$vow = DB::table('media_featured')->where('is_video_of_the_week', 1)->
where('video_of_week_expired', '!=', 1)->first();

CREATE TABLE `media_featured` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`media_id` int(10) unsigned DEFAULT NULL,
`is_video_of_the_week` tinyint(1) DEFAULT NULL,
`is_featured` tinyint(1) DEFAULT NULL,
`video_of_week_expired` tinyint(1) DEFAULT NULL,
`featured_expired` tinyint(1) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `media_featured_media_id_foreign` (`media_id`),
CONSTRAINT `media_featured_media_id_foreign` FOREIGN KEY (`media_id`) REFERENCES `media`        (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

记录可能包含is_video_of_the_week = 1video_of_week_expired = NULL,但上述查询返回null。

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

NULL值不等于或等于其他任何值。

所以column != NULL总是假的column = NULL

要检查列是否包含NULL值,您需要使用IS NULL运算符。

如果是laravel db query generator,你可以使用

->whereNull('video_of_week_expired')

方法

PS:如果假设video_of_week_expired是一个与标志相似的列,则最好将其设为NOT NULL并使用0 / 1值,而不是{{1 }} / NULL

答案 1 :(得分:8)

如果video_of_week_expired的值为NULL1,那么您可以使用

  

- > whereNull()

否则 如果该值类似于标记01,那么您可以尝试使用

  

- > where(' video_of_week_expired','<>',1)

此处<>不等于&#39;操作

答案 2 :(得分:0)

基于documentationsource-code

您应该使用whereNull

$vow = DB::table('media_featured')
          ->where('is_video_of_the_week', 1)
          ->whereNull('video_of_week_expired')
          ->first();