如果我取像一個對象,以便:使用Propel更新對象後可以保持水合嗎?
$q = OrderReturnQuery::create()
->joinWith('Type')
->joinWith('Status')
->useStatusQuery()
->joinWith('Email')
->endUse()
->joinWith('Priority');
$object = $q->findPk(1);
var_dump($object->toArray(TableMap::TYPE_PHPNAME, true, [], true));
這是輸出我得到:
array (size=14)
'Id' => int 1
'TypeId' => int 3
'StatusId' => int 2
'PriorityId' => int 1
'OrderId' => int 234567
'CustomerId' => int 5
'Initiated' => string '2016-03-02T01:11:12+00:00' (length=25)
'Initiator' => int 2
'FreePostageLabel' => boolean true
'LostInPost' => boolean false
'SuppressEmail' => boolean true
'Type' =>
array (size=4)
'Id' => int 3
'Title' => string 'title 3' (length=7)
'Priority' => int 3
'OrderReturns' =>
array (size=1)
0 => string '*RECURSION*' (length=11)
'Status' =>
array (size=6)
'Id' => int 2
'EmailId' => int 2
'Title' => string 'title 2' (length=7)
'Priority' => int 2
'Email' =>
array (size=5)
'Id' => int 2
'Subject' => string 'subject 2' (length=9)
'Plaintext' => string 'plain text 2' (length=12)
'Html' => string 'html 2' (length=6)
'Statuses' =>
array (size=1)
0 => string '*RECURSION*' (length=11)
'OrderReturns' =>
array (size=1)
0 => string '*RECURSION*' (length=11)
'Priority' =>
array (size=4)
'Id' => int 1
'Title' => string 'title 1' (length=7)
'Priority' => int 1
'OrderReturns' =>
array (size=1)
0 => string '*RECURSION*' (length=11)
現在,如果我修改的原代碼傾銷之前更改值:
$object = $q->findPk(1);¬
$object->setStatusId(5);
生成的輸出不包含Status
元素,只有'StatusId'。在使用toArray()
之前,我當然可以用$object->getStatus()
回來,但是有沒有辦法一般地做到這一點?
我想知道是否有辦法檢查一個值是否是一個外鍵,如果是這樣,我可以在設置該值後自動獲得getWhatevers()
,而不是對它們進行硬編碼。或者也許有更好的方法?
我的其他選擇是覆蓋toArray
,但必須考慮數據庫中的錯誤和維護數量變化的範圍。
OP已經在做 – DarkBee