2010-02-11 5 views
0

Je suis aux prises avec un problème très étrange et je n'arrive pas à le résoudre.Impossible de charger les tables associées lors de l'exécution de la requête depuis Doctrine_Record

Version courte
Lorsque j'exécute une requête à partir d'un Doctrine_Record, il ne semble pas fonctionner lorsque je tente d'obtenir une table connexe. Je reçois une exception:

error: Uncaught PHP Error: Trying to get property of non-object in file D:/Tools/Development/xampp1.7/htdocs/x-interactive/xibits/application/views/issues/changeList.php on line 23

Sur cette ligne particulière, j'essaie de se rendre à la table des enfants de la table en cours

version longue

J'utilise Doctrine Kohana +. J'ai trois tables où je veux obtenir les résultats.

J'ai deux situations:

  1. Afficher tous les Childs d'une table particulière
  2. montrer quelques Childs d'une table particulière

Pour la première situation, je mets une méthode dans un modèle qui exécute une requête (doctrine) et renvoie le résultat. Cela fonctionne juste bien. Pour la deuxième situation, il a semblé pratique d'ajouter une méthode à l'enregistrement de doctrine parent, de tout extraire, puis filtrée. Mais quand j'exécute cette requête, je reçois ou une exception de classe inconnue, ou une tentative d'obtenir une référence à une erreur non-objet (en fonction de ce que j'exécute/retourne exactement). En essayant d'aller à la source du problème, je viens même de retourner le résultat de la première méthode qui devrait fonctionner, mais même là, j'ai la même erreur.

Est-ce un problème d'exécuter la requête depuis un 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(); 
} 

La vue où ce code est utilisé:

<?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;?> 

Répondre

0

Pour voir les données que vous avez obtenu de Doctrine, vous pouvez utiliser ceci:

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

Vous n'avez pas fourni votre shema, donc je ne peux pas en dire plus ..

+0

Avec un peu d'aide, j'ai résolu le problème en simplifiant la requête. – Ikke

Questions connexes