【问题标题】:Idiorm find_many() returns only one object惯用语 find_many() 只返回一个对象
【发布时间】:2013-09-18 02:52:11
【问题描述】:

我已经玩 idiorm 几天了,并且一点一点地设法让它真正开始执行查询。不过,我遇到了一些奇怪的事情,我无法弄清楚。 find_many() 函数只返回一条记录,并且始终是数据库中的最后一条记录。例如,我通过 mysqli 执行以下查询,并在我的数据库中获取所有 16 个用户:

// connection is just a singleton instance to manage DB connections    
$connection->getRawInstance()->getRawConnection()->query('select * from users'));

// The result of this is all 16 users

现在,当我在 idiorm 中执行等效查询时,我只得到 user16,即数据库中的最后一个。

\ORM::configure('mysql:host=localhost;dbname=------');
\ORM::configure('username', '----');
\ORM::configure('password', '----');
\ORM::configure('logging', true);

$people = \ORM::forTable('users')->findMany();

有人知道这是为什么吗?

【问题讨论】:

    标签: php idiorm


    【解决方案1】:

    经过调查;您的表似乎缺少 id 列,或者您的 id 列不包含唯一值,或者您已将 Idiorm 配置为使用无效列而不是 id

    Idiorm 循环遍历返回的行并将它们分配给一个数组,使用 id 值作为索引/键。如果没有id 值,则只返回最后一个结果。如果您有一个包含重复值的 id 列,那么您将获得比应有的更少的结果,因为重复项会覆盖数组中以前的键。

    您可以在github bug 上查看更多信息以及建议的更改。

    【讨论】:

    • 这个问题让我真的因为沮丧而尖叫。我认为可能应该在文档的早期就提到表中的第一列必须简单地称为“id”的约定。
    • 对于不想查看错误描述的人,解决方案可以将 id 列名称更改为 id 或使用 id_column_overrides 设置指定列名称,例如:ORM: :configure('id_column_overrides', array('customer' => 'customer_id', ));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2020-09-24
    相关资源
    最近更新 更多