This query is returning null when an object is expected.
$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;
A record might have
is_video_of_the_week = 1 and
video_of_week_expired = NULL but the above query returns null.
NULL values are not equal or not equal to anything else.
column != NULL is always falsy as well as
column = NULL
To check if a column contains
NULL value you need to use
IS NULL operator.
In case of laravel db query generator you could use
video_of_week_expired is assumed to be a flag-alike column, you better make it
NOT NULL and use
1 values, instead of
If the value for
1 then you can use
if the value is like a flag
1 then you can try using
->where(‘video_of_week_expired’, ‘<>’, 1)
<> is a ‘not equal to’ operator.
You should use
$vow = DB::table('media_featured') ->where('is_video_of_the_week', 1) ->whereNull('video_of_week_expired') ->first();