我将代码从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或者我不应该像对待codeigniter一样对待laravel并且想到一些完全不同的东西来处理这种动态where子句?
同样在codeigniter中,您可以将查询的一部分设置为缓存,因此即使您触发查询,这些部分也会保留下一个查询,通常是where子句。 Laravel有类似的功能吗?谢谢!
答案 0 :(得分:2)
您可以将当前的工作分配给变量,并在此基础上进行构建,让我根据您的示例向您展示一个示例:
而不是这个
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();
答案 1 :(得分:0)
我不应该像对待codeigniter一样对待laravel,并且想一些完全不同的东西来处理这种动态where子句?
这不是动态where子句。
并且请养成阅读文档的习惯。
的文档 $users = DB::table('users')->where('votes', '>', 100)->get();
您可以将查询的一部分设置为缓存,因此即使您触发查询,这些部分也会保留下一个查询,通常是where子句。 Laravel中是否有类似的功能?
$users = DB::table('users')->remember(10)->get();
下次,只需打开文档即可。它们包含了所有这些。