【问题标题】:Laravel 4 Build Query where clause on the flyLaravel 4即时构建查询where子句
【发布时间】:2013-12-31 01:37:22
【问题描述】:

我正在将我的代码从 CodeIgniter 移植到 Laravel。并对查询生成器有一些疑问。

在 codeigniter 中,我可以将 where 子句添加到活动记录对象,因为我在类中初始化每个属性,例如

$this->db->where('xxxx','bbbb'); 

在一个属性初始化函数中,和

$this->db->where('yyyy','aaaa'); 

在另一个属性函数中,它会全部链接起来,直到我触发查询。但这似乎不是 Laravel 的情况。

这是我在 laravel 中每个属性初始化函数所做的事情

DB::table($this->table)->where('xxxx','bbbb');
DB::table($this->table)->where('yyyy','aaa');

当从外部调用实际方法时,它会运行

DB:table($this->table)->get(); 

但这给了我一个SELECT * FROM TABLENAME 没有任何地方的条款。那么我在这里做错了什么:x 或者我不应该将 laravel 与 codeigniter 相同,并想出一些完全不同的东西来处理这种动态 where 子句?

同样在 codeigniter 中,您可以将查询的一部分设置为缓存,因此即使在您触发查询之后,这些部分也会保留用于下一个查询,通常是 where 子句。 Laravel 中是否有类似的功能?谢谢!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以将您当前的工作分配给一个变量,并以此为基础,让我根据您的示例向您展示一个示例:

    不是这个

    DB::table($this->table)->where('xxxx','bbbb');
    DB::table($this->table)->where('yyyy','aaa');
    

    试试这个...

    $query = DB::table($this->table)->where('xxxx','bbbb');
    $query->where('yyyy','aaa');
    
    $results = $query->get();
    

    【讨论】:

    • 谢谢。正是我需要让查询滚动:)
    【解决方案2】:

    我不应该把 laravel 和 codeigniter 一样对待,而是想一些完全不同的东西来处理这种动态 where 子句?

    这不是动态的 where 子句。

    请养成阅读文档的习惯。

    来自 Fluent query builder

    的文档

    $users = DB::table('users')->where('votes', '>', 100)->get();

    您可以将查询的一部分设置为缓存,因此即使在您触发查询之后,这些部分也会保留用于下一个查询,通常是 where 子句。 Laravel 中是否有类似的功能?

    $users = DB::table('users')->remember(10)->get();

    下次,只需打开文档即可。它们包含所有这些。

    【讨论】:

    • 我确实遇到了那部分。但据我了解,它是用于缓存查询结果而不是 where 子句。我只需要缓存到 where 子句,所以当我启动一个类时,它已经为对不同数据列的进一步操作做好了准备。也许它与 CI 不同,我期望我必须启动缓存开始和缓存结束会话才能存档我需要的东西。当我有更多时间时,我一定会深入研究文档,谢谢。
    • 这里只是一个误会。在谈到为下一个查询保留时,OP 指的是能够在多个语句上构建查询,而不是在单个链式语句中。
    • @duellsy 哈哈。你答对了。他说缓存,所以我认为是关于缓存
    猜你喜欢
    • 2021-09-18
    • 2010-10-28
    • 2015-06-03
    • 2019-10-19
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多