Benim CakePHP 1.2.5 app, ben bir User
modelini belongsTo bir Profile
modeli var. Kullanıcı modeli username
alanı vardır ve Profil model üzerinde bir find()
yaparken, ben her zaman otomatik olarak çok User.username
değerini almak istiyorum. Ben otomatik olarak istenilen alanı içeren benim Profili modelin beforeFind()
yöntemini değiştirmek mantıklı olur rakam.
Burada yapmak için teşebbüs ne:
public function beforeFind($queryData) {
// determine if the username data was already requested to be included in the return data via 'User.username' or 'User' => array('username').
$hasUserData = isset($queryData['contain']) && in_array("User.{$this->User->displayField}", $queryData['contain']);
$hasUserData |= isset($queryData['contain']['User']) && in_array($this->User->displayField, $queryData['contain']['User']);
// request the the username data be included if it hasn't already been requested by the calling method
if (!$hasUserData) {
$queryData['contain']['User'][] = $this->User->displayField;
}
return $queryData;
}
Ben değeri $queryData['contain']
düzgün güncellenmekte olduğunu görebilirsiniz, ancak adı veri alındığını değildir. Ben find()
yöntemi için CakePHP çekirdek koduna baktı, ve ben Containable zaten yapması gereken şeyi yaptım, yani beforeFind()
geri çağırma tüm Davranışlarını 'geriçağırımlarının sonra çağrıldığını bulundu değeri ile $queryData['contain']
Bunu değiştirmek mümkün oldu önce.
Nasıl çekirdeğini hack olmadan bu çalışabilirsiniz?