【问题标题】:Kohana ORM finds only a first record?Kohana ORM 只找到第一条记录?
【发布时间】:2012-09-06 19:24:12
【问题描述】:

我在 Kohana 中使用 ORM,我想获得一些 id = 2 的记录,但是当我使用时:

$user = ORM::factory('user');
$user->find(2);
echo $user->name;

结果总是显示表users中第一条记录的值,有什么问题?

【问题讨论】:

  • 不存在的 id 会发生什么,例如 999999999-10
  • Kohana 是 3.2.0 其他 id 是相同的值。

标签: php orm kohana


【解决方案1】:

根据代码,find() 不需要参数:

https://github.com/kohana/orm/blob/3.2/master/classes/kohana/orm.php#L894

根据文档:

http://kohanaframework.org/3.2/guide/api/ORM#find

find() 只是从数据库中加载第一条记录。为避免这种情况,只需使用:

$user = ORM::factory('user');
$user = $user->where('id', '=', 2)->find();
echo $user->name;

请测试一下,因为我已经很久没有使用Kohana了。

【讨论】:

  • 太好了,谢谢!而且不是主题,但如果不是秘密的话,我对你现在使用的东西很感兴趣?
  • 还有我想知道如何一次找到几行记录?
  • @VictorCzechov:还有另一种方式,使用factory调用,描述她:kohanaframework.org/3.2/guide/api/ORM#factory。回答你的另一个问题:不,这不是秘密,但我正在使用各种技术。对于一个框架,我更喜欢 Django,但是在 PHP 世界中 Symfony 2 看起来很有希望。 (任何不感兴趣的人:抱歉垃圾邮件)
  • @VictorCzechov:要获得更多的行,可以用同样的方式进行查询(使用where()and_where()or_where()where_open()where_close()和各种查询方法builder) 并以find_all() 结束。我相信你会得到一个迭代器,你将能够迭代find_all()的结果。
  • @VictorCzechov:是的,它应该能够执行与查询生成器几乎相同的操作,因此where()and_where() 以外的方法也应该可以工作(甚至加入、偏移等)。如需完整的方法列表,请访问:kohanaframework.org/3.2/guide/api/ORM
【解决方案2】:

正如@Tadeck 所说,find() 不需要争论。

尝试在ORM::factory 调用中使用 id:

$user = ORM::factory('user', 2);

【讨论】:

    【解决方案3】:

    您是否尝试过设置 ORM 对象的主键?

    受保护的 $_primary_key

    http://kohanaframework.org/3.0/guide/api/ORM#find 表示 find 尝试根据主键定位项目。

    【讨论】:

    • 看来这可能是 Kohana 版本的差异。
    • 您的解决方案需要覆盖模型(因为$_primary_keyprotected),所以这似乎是一种矫枉过正。 @KimE:是的,这里描述了问题中的 3.2:kohanaframework.org/3.2/guide/api/ORM#find
    • 对,这看起来应该来自数据库
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多