2012-08-14 65 views
4

我在我的模型學說查詢說Model_1Table.class.php是左與Model_2連接。 Model_2與多對一關係中的Model_1相關。 (果然是一個一對一的關係,而不是多到一個,但該模式得到了設計成)主義疼痛左的訪問成員加入是空

我的查詢是:

$this->select('m1.*, m2.primaryKeyOfModel2')->leftJoin('m1.model2 m2')->where('m1.record = ?', some_value); 

檢查SF調試日誌,它檢索信息因爲它應該保留來自Model_1的滿足where子句的所有表記錄,並保留Model_2的所有值以及那些不存在的值的空值。

疼痛開始時,我想訪問這些信息,並有條件地呈現依賴於我的表的存在/不存在的model_2記錄的信息。我這樣做:

<?php foreach($Model1Records as $Model1Record) : 
      if($Model1Record->getModel2()) : 
       foreach($Model1Record->getModel2() as $Model2Record): 
         //do something 
       end foreach ; 
      else: //basically checking for if(!($Model1Record->getModel2())) 
       // do something else 
      endif; 
    endforeach ; ?> 

現在,在此基礎上,應該真正的工作,但我認爲正在發生的事情是,MODEL2的空值失敗。我怎麼推斷,很好,因爲如果我刪除在上面記錄的if-else語句,並簡單地用一個foreach循環訪問Model2Record的集合,在Model2Record可用檢索行,但隨後offcourse它不訪問空值。從本質上講,我從這裏得到的信息就是我通常從內部聯接獲得的信息。

在框架的一個問題,我怎麼訪問具有Model2的記錄爲空值的模型1的記錄?

回答

3

不知道model1和model2之間通過doctrine的null關係的默認返回值是什麼,但顯然它不返回false,否則您將碰到else條件,請嘗試'instanceof',例如:

<?php foreach($Model1Records as $Model1Record) : 

     if($Model1Record->getModel2() instanceof Model2) : 

您也可以嘗試鑄造模型1對象數組:

<?php foreach($Model1Records as $Model1Record) : 

    <?php $model1 = $Model1Record->toArray(); ?> 

     if(isset($model1['Model2'])) : 

- 更新 -

如果它返回了Doctrine_Col你應該可以這樣做:

<?php foreach($Model1Records as $Model1Record) : 

     if($Model1Record->getModel2()->count() > 0) : 
+0

它返回一個Doctrine Collection;這就是爲什麼其他條件從未執行;所以對於那些空值,空集合渲染... – user1020069 2012-08-19 03:20:42

+0

的instanceof模型2會失敗,因爲它是一個一對多的關係,它返回的記錄的集合 – user1020069 2012-08-19 03:37:19

+0

去過幾天...你得到它的工作? – 2012-08-23 20:21:11