我正在努力实现一个非常简单的目标,但它似乎并没有起作用。我希望使用Kohana的ORM并有条件地添加某些参数。
例如:
$query = ORM::factory('user')
->where('foo', '=', 'bar');
if (isset($some_var))
$query->where('field', '=', $some_var);
$query->find_all();
人们会认为这应该有用,但我从$query
获得的所有东西都是无足轻重的。任何建议,我将不胜感激!感谢。
修改
这个Kohana页面上的简单示例甚至显示了类似的查询: http://kohanaframework.org/3.1/guide/orm/examples/simple
...但即使我创建了一个'用户'模型实例,然后在单独的语句中尝试find_all()
,我也什么也得不到。
这有效:
$query = ORM::factory('user')->find_all();
这不起作用:
$query = ORM::factory('user');
$query->find_all();
可能的错误??
答案 0 :(得分:4)
在您的示例中,您将find_all()返回的值赋给$ query。虽然在不起作用的示例中,您根本没有分配find_all()返回的值。
$query = ORM::factory('user');
$result = $query->find_all();
// you may now loop over $result
当你查看api时,你会发现find()和find_all()的工作方式不同。
答案 1 :(得分:0)
您的代码完全正常,因为ORM::where
方法返回ORM对象,因此方法链接没有问题。您应该在其他地方查找错误(可能您的$some_var
已设置但可能为空,因此您的情况可能与预期的不同)。我会尝试这个小改动:
if (!empty($some_var))
$query->where('field', '=', $some_var);