首页 > 解决方案 > Laravel 雄辩的选择数据

问题描述

我想构建一个雄辩的查询来构建这个输出:

SELECT * FROM `banners` WHERE (`channel` = "en-us" OR `channel` IS NULL) AND (`language` = "en" OR `language`IS NULL) AND (`country` = 'us' OR `country` IS NULL) AND `category_id` = "3954" AND `valid_from` <= "2018-10-03 13:20:52" AND `valid_to` >= "2018-10-03 13:20:52" OR `valid_to` IS NULL

我与“或”和“和”条件作斗争。

这应该意味着valid_from、valid_to、channel、language必须有值,但在某些情况下“channel”和“language”可以为null。

请帮我。提前致谢!

标签: databaselaraveleloquent

解决方案


这不是您发布的查询的确切输出,因为我在查询的右括号中看到了一些语法错误。所以我不能完全理解你的查询。

但是,既然你已经指出你正在努力理解如何使用,and我认为这可能会有所帮助。orquery builder

DB::table('banners')
    ->where([                                         //     -|
        ['valid_from', '<=', '2018-10-03 13:20:52'],  // AND  |
        ['valid_to', '>=', '2018-10-03 13:20:52'],    // AND  |
        ['channel', 'en-us'],                         // AND  | OR
        ['language', 'en']                            // AND  |
    ])->orWhere([                                     //     _|____
        ['valid_from', '<=', '2018-10-03 13:20:52'],  // AND  | OR
        ['valid_to', null]                            // AND _|____
    ])->orWhereNull('channel')                        //     _| OR
    ->orWhereNull('language')                         //     _| OR
    ->get();

祝你好运


推荐阅读