【问题标题】:Kohana 3.1 ORM: How to make 'where ... in' clauseKohana 3.1 ORM:如何制作“where ... in”子句
【发布时间】:2011-04-13 00:04:48
【问题描述】:

多亏了 Kohana 的出色文档,我不得不在 SO 上俯首称臣。 ;)

希望这真的很简单:我正在尝试收集属于某个 ID 组的所有故事。我的代码如下:

$story_ids = '(12,56,99,213,319)';
$stories = ORM::factory('story')->where('id', 'IN', $story_ids)->find_all();

但是,这显然行不通。我收到 MySQL 错误,因为在查询中的 $story_ids 字符串周围加上了单引号。

编辑:我也尝试将 $story_ids 作为数组传递,但随后我收到“500 内部服务器错误”

是否可以按照我的要求进行操作?

提前致谢。

【问题讨论】:

    标签: kohana-3 kohana-orm


    【解决方案1】:

    将 $story_ids 作为数组传递应该可以。

    $story_ids = array(12,56,99,213,319);
    $stories = ORM::factory('story')->where('id', 'IN', $story_ids)->find_all();
    

    您使用的是什么 Kohana 版本?

    【讨论】:

    • 它在标题中,但更具体地说,我使用的是 3.1.1。如我的描述中所述,将值作为数组传递会返回 500 错误。 DB::Expr 非常适合我,所以我一直在使用它。 :)
    【解决方案2】:

    您可能忘记了 ->select() 吗?

    此外,here 列出了两种使用“IN”关键字的方法:

    ORM::factory('table1')->select('mls_id')->where('mls_id', 'NOT IN', DB::Select('mls_id')->from('table2'))->find_all();
    ORM::factory('table1')->select('mls_id')->where('mls_id', 'NOT IN', DB::Expr('(SELECT mls_id FROM table2)'))->find_all();
    

    我通常使用 DB::Expr 方法来处理你正在做的事情。

    【讨论】:

    • 我没有执行子查询。我已经有了 ID 的字符串(或数组),并且只想将其传递给 where 方法的第三个参数。如果我使用 DB::Expr(),它只是一个问题:ORM::factory('story')->where('id', 'IN', DB::Expr($story_ids))-> find_all();?
    • 拍我的便便,叫我查理,成功了!将我的 $story_ids 字符串包装在 DB::Expr() 中解决了这个问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2011-08-06
    相关资源
    最近更新 更多