2009-11-28 44 views
0

我有一個symfony 1.2和propel很煩人的問題。
我有一個模型,我已經實現了使用單表策略的繼承。所以,這裏是我的模型的摘錄:
廣告(ID,posted_date,說明) 然後RealEstateAd(位置,價格,TRANSACTION_TYPE)和JobAd(位置,要求公司),這無論是從廣告繼承。有關在propel-symfony中繼承上下文中選擇對象的問題

我想顯示所有廣告,但我想顯示一個與JobAd不同的RealEstateAd。爲了達到這個目的,我使用了部分RealEstateAd和部分JobAd。
所以,在操作,我這樣做:

$c = new Criteria(); 
$this->allAds = AdPeer::doSelect($c); 

在模板中,我檢查類的每個對象:

$add = $allAds[$i]; 
if ($add instanceof RealEstateAdd) 
    //Use the RealEstatePartial 

的問題是類的一個對象在$ allAds數組是sfOutputEscaperObjectDecorator。 因此,根本沒有顯示。

我該如何處理這個問題?有沒有辦法用RealEstateAd或JobAd類的對象獲取數組?這裏進行的保溼過程如何?

+0

我有一個與Propel單表繼承相關的問題。同行沒有返回正確類型的對象。任何幫助不勝感激:http://stackoverflow.com/questions/2067354/propel-single-table-inheritance-issue – 2010-01-15 19:06:13

回答

0

我不知道很多關於symfony中或推進,所以,如果我在這裏是大錯特錯我道歉,只是忽略這個帖子...

如果你創建一個輔助函數getAdType()使用一些方法區分不同類型的廣告。

function getAdType($ad) { 

    if (isset($ad->position)) { 
     return 'job'; 
    } 
    elseif (isset($ad->transaction_type)) { 
     return 'realestate'; 
    } 

} 

$add = $allAds[$i]; 
if (getAdType($add) == 'realestate') 
    //Use the RealEstatePartial 
+0

這是一個有趣的選擇蓋倫。我終於明白,我們可以通過getRawValue()方法訪問decorator undelying objet來獲得對象類。 – Pattchen 2009-11-30 17:50:01

0

我可能會被誤解的東西,但除非你已超負荷AdPeer ::的doSelect(),那麼它只會返回廣告實例的數組。

如果你發佈你的模式,這將是更容易爲我或其他人幫助,因爲它是不是真的清楚你如何建立你的對象模型。 RealEstateAd是一個在schema.yml中定義的推進類嗎?還是它已經添加到lib的自定義類?

Eitherway,AdPeer :: doSelect產生的*只會返回廣告,所以它聽起來像你需要的是在AdPeer定製的獵犬。同樣,有關您的模式的更多信息將有所幫助。

+0

嗨胡安,感謝您的時間。實際上,AdPeer :: doSelect()不返回Ad對象,而是返回Ad對象的裝飾器。 grewino指出,可以用getRawValue()方法獲取底層對象。 所以,在我的例子中,我可以這樣做: $ add-> getRawValue(); 然後執行測試: if($ rawValue instanceof RealEstateAdd) { // ... } – Pattchen 2009-11-30 17:42:57

1

sfOutputEscaperObjectDecorator有raw method獲得則由底層對象。

無論如何,你能做的最好的事情是有三種不同級別的(我認爲房地產和招聘廣告是型號)

class Ad { public function __toString() { print 'ad'; } } 

class RealEstates extends Ad { public function __toString() { print 'realad'; } } 

class JobAd extends Ad { public function __toString() { print 'jobad'; } } 

所以你可以調用打印$ myAd;在你的視圖中沒有檢查對象類型。 (使用多態盧克)

+0

非常感謝gpilotino。 $ add-> getRawValue()工作正常。 其實,我在我的推動模型中有3個類:Ad,RealEstateAd和JobAd。 – Pattchen 2009-11-30 17:48:23