2015-09-25 114 views
2

我是Yii的新手,其實問題在於,我很多時候都面臨像非對象錯誤這樣的問題。如何覆蓋Yii核心功能?

這是由於關係而發生的。即例如,我們有兩張名爲patient and facility的表格,爲了在管理頁面中顯示數據,我們必須映射這兩個表格並在那裏顯示記錄。現在,當我們刪除任何一個匹配病歷表的非對象錯誤匹配記錄的設施ID時。

我不知道,yii基於數據庫關係創建或沒有,但yii關係像左連接一樣正常工作,儘管與核心mysql概念相比,左連接給出了結果精確的結果,如設施表值爲null而非值當它們不匹配記錄時。

但在yii的情況下,這將不會創建設施數組甚至空字段名稱,這就是爲什麼非對象錯誤拋出,以解決這些類型的錯誤我們有任何解決方案yii框架本身?

否則我有一個想法來解決這個問題,必須找到在yii上構建這些連接的文件,而不是空數組,我們可以填充表結構(即字段名稱爲null或空值),然後數據將顯示爲空白,以便我們可以修復這些錯誤。

任何人都可以告訴我在哪裏必須找到該文件,以及我必須觸摸代碼?

在此先感謝

例:

我需要這樣的

patient => 
     id=>1 
     name=>venkat 
     facilityid=> 1 
     facility=> array(
          'id'=>'' 
          'facilityname'=>'' 
         ) 

而不是

patient => 
     id=>1 
     name=>venkat 
     facilityid=> 1 
     facility=> array(

         ) 
+2

你有沒有在這簡單的檢查,如果該值是一個空數組一些邏輯視爲扔?例如:'if(empty($ patient-> facility)){// do something}'?你不應該修改Yii的核心。 – visevo

+0

是的,我們可以這樣做,但最好的框架之一沒有在yii本身的解決方案?或者它可能是我認爲的錯誤,這在開發人員的角度來說有些困難。 – venkat

+0

如果我們必須在一個地方改變它,它會被治癒,而不是檢查每個文件,如果沒問題,讓我知道解決方案。 – venkat

回答

0

如果關係不存在,它RET爲HAS ONE設置空值,爲HAS MANY類型設置空數組。您應該使用它來檢查關係是否存在,而不是期望它包含空的相關模型或空相關模型的數組。

如果您想更改核心功能的行爲,請擴展任何核心類,重寫必要的方法並改爲使用該類。在這種情況下,我認爲你可能不得不在CActiveRecord類上工作,找出它如何調用關係(可能使用__get()魔術方法)並重寫它。我認爲,這不僅僅是檢查關係是否存在,而是更多的工作(在這個過程中,你也可能會把其他東西搞砸)。

0

如果您需要此功能,爲什麼不直接在您的模型和ActiveRecord類之間放置一個類並重寫該函數以適應您的編碼風格?

無需改變核心