从Doctrine_Record执行查询时无法加载相关表

时间:2010-02-11 12:21:35

标签: php doctrine

我正在努力解决一个非常奇怪的问题,我似乎无法解决它。

简短版
当我从Doctrine_Record中执行查询时,当我尝试获取相关表时它似乎不起作用。我得到一个例外:

  

错误:未捕获的PHP错误:尝试获取文件中非对象的属性   d:/Tools/Development/xampp1.7/htdocs/x-interactive/xibits/application/views/issues/changeList.php   在第23行

在该特定行上,我尝试访问当前表的子表

长版

我正在使用Kohana + Doctrine。我有三张桌子,我想从中得到结果。

我有两种情况:

  1. 显示特定餐桌的所有孩子
  2. 显示特定表格的某些孩子
  3. 对于第一种情况,我在一个执行(doctrine)查询的模型中放了一个方法并返回结果。这只是工作正常。

    对于第二种情况,将方法添加到父学说记录,获取所有内容,然后进行过滤看起来很方便。但是当我执行该查询时,我得到或者是一个未知的类异常,或者试图获得对非对象错误的引用(取决于我完全执行/返回的内容)。试图找到问题的根源,我甚至只返回应该工作的第一个方法的结果,但即使在那里我也会得到同样的错误。

    从Doctrine_Record中执行查询是否有问题?

    Doctrine_Record:

    class Issue_History extends BaseIssue_History
    {
        public function getUserSafeItems()
        {
            $model = new Issue_History_Model();
            return $model->fromIssueId(0);
        }
    }
    

    Issue_History_Model:

    public function fromIssueId($issue_id)
    {
        $q = Doctrine_Query::create()
            ->from("Issue_History IH, IH.Issue_History_Items IHI, IHI.Change_Types")
            ->where("IH.issue_id = ?", 3)
            ->orderBy("IH.date");
    
        return $q->execute();
    }
    

    使用此代码的视图:

    <?foreach($model->issue_history as $history): //$issue_history is the result of Issue_History_Model->fromIssueId($id)?>
    <div class="changeItem">
        <h4>Bijgewerkt door <?=$history->User->name?> <?=datehelper::getRelativeTime($history->date)?></h4>
        <ul>
            <?
              if($model->showNonUserChanges || $history->hasUserSafeItems()): //In the case of the error, the first condition is false, but the last is true?>
              $history_items = $model->showNonUserChanges ? $history->Issue_History_Items : $history->getUserSafeItems()->Issue_History_Items?>
              <?foreach($history_items as $history_item):?>
                <li><?=sprintf($history_item->Change_Types->text, $history_item->old_value, $history_item->new_value)//Exception happens here?></li>
              <?endforeach?>
            <?endif;?>
        </ul>
    </div>
    <?endforeach;?>
    

1 个答案:

答案 0 :(得分:0)

要查看从Doctrine获得的数据,您可以使用:

var_dump($history->toArray());
var_dump($history_items->toArray());

你没有提供你的shema,所以我不能多说..