【问题标题】:Basic Kohana ORM find records基本 Kohana ORM 查找记录
【发布时间】:2012-03-08 17:08:28
【问题描述】:

我想使用 Kohana 3 具有的默认 ORM 从我的数据库中获取一些行,但我没有得到我想要的 :-)

In my Controller:

$comptes = ORM::factory('compte');
#$comptes->where('empresa_id', '=', 2)->find_all();
$comptes->find_all();

此查询在我的 SQL 中返回 169411 行,但这里没有返回任何内容。当然,我可以使用 where、limit 或其他方式进行限制,但我正在尝试使用 Kohana 的基础知识。

This returns 1
$result = count($comptes);



In my model view:
<?php var_dump($comptes)?>

produces this:
object(Model_Compte)#16 (34) { ["_has_one":protected]=> array(0) { } ["_belongs_to":protected]=> array(0) { } ["_has_many":protected]=> array(0) { } ["_load_with":protected]=> array(0) { } ["_validation":protected]=> NULL ["_object":protected]=> array(14) { ["id"]=> NULL ["empresa_id"]=> NULL ["codi_compte"]=> NULL ["compte"]=> NULL ["tipus"]=> NULL ["saldo_deure"]=> NULL ["saldo_haver"]=> NULL ["saldo"]=> NULL ["nivell"]=> NULL ["ultim_moviment"]=> NULL ["client_id"]=> NULL...

这就是模型,但是我如何获取获取的数据?

在我看来也是这样:

foreach ($comptes as $row)
{
 echo "<p>$row->codi_compte</p>";
}
?>

但我什么也没得到......

谢谢!

编辑

这不起作用:

$comptes = ORM::factory('compte');
$comptes->find_all();

但这行得通 $comptes = ORM::factory('compte')->find_all();

为什么?

这不起作用:

$comptes = ORM::factory('compte');
$comptes->where('empresa_id', '=', 2)->find_all();

但同样,这是可行的:

$comptes = ORM::factory('compte')->where('empresa_id', '=', 2)->find_all();

这个多行示例来自Kohana Web

【问题讨论】:

    标签: kohana kohana-3 kohana-orm


    【解决方案1】:

    获取所有行的正确语法是:

    $comptes = ORM::factory('compte')->find_all();
    

    然后检查是否已加载使用$comptes-&gt;loaded()(不是count($comptes))。

    编辑:

    要使用where 语句获取行,您可以编写:

    $rows = ORM::factory('compte')->where('empresa_id', '=', 2)->find_all();
    

    【讨论】:

    • 好的,如果我使用你的语法,我可以获取所有行,如果我分成两行,它不起作用,对我来说很奇怪。另外,如果我想使用'where'来获取,我遇到了和以前一样的问题,没有行,但肯定有这个'where'的行。
    • 是的,但是当来自 Kohana 网络的示例/文档说是时,为什么多行不起作用?
    • 嗯......不知道为什么这些例子是这样的。 Kohana 的文档有时不准确或过时,所以它可能曾经像那样工作,但现在不再这样了。实际上,如果您查看此页面kohanaframework.org/3.2/guide/orm/using,您会看到我在答案中提到的相同语法。
    • 好的,我明白了,我的文档来自 kohana3.0,而你的文档来自 3.2,这是个问题,文档很少,而且大部分都是旧的或过时的,我来自 RoR,事情变得更容易,至少在开始时;-)。再次感谢!
    【解决方案2】:

    如果您只是想为了可读性将其分解为多行,这是 IMO 最简单的方法...

    示例:

    $comptes = ORM::factory('compte')
        ->where('empresa_id', '=', 2)
        ->find_all();
    

    【讨论】:

      【解决方案3】:
      $comptes = ORM::factory('compte');
      $comptes->find_all();
      

      这不起作用,因为您使用了分号。 分号表示语句结束。

      如果你像这样删除分号,它会正常工作:

      $comptes = ORM::factory('compte')
      ->find_all();
      

      或仅将其设为 1 行:

      $comptes = ORM::factory('compte')->find_all();
      

      【讨论】:

        【解决方案4】:
        $comptes = ORM::factory('compte');
        $comptes->find_all();
        

        这不起作用,因为您没有分配 find_all() 导致变量。 你应该写:

        $comptes = ORM::factory('compte');
        $rows = $comptes->find_all();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-16
          相关资源
          最近更新 更多