У меня есть следующие модели:
class Site extends AppModel {
public $name = "Site";
public $useTable = "site";
public $primaryKey = "id";
public $displayField = 'name';
public $hasMany = array('Item' => array('foreignKey' => 'siteId'));
public function canView($userId, $isAdmin = false) {
if($isAdmin) { return true; }
return array_key_exists($this->id, $allowedSites)!==false;
}
}
и
class Item extends AppModel {
public $name = "Item";
public $useTable = "item";
public $primaryKey = "id";
public $displayField = 'name';
public $belongsTo = array('Site' => array('foreignKey' => 'siteId'));
public function canView($userId, $isAdmin = false) {
// My problem appears to be the next line:
return $this->Site->canView($userId, $isAdmin);
}
}
В моем контроллере я делаю что-то вроде этого:
$result = $this->Item->read(null, $this->request->id);
// Verify permissions
if(!$this->Item->canView($this->Session->read('userId'), $this->Session->read('isAdmin'))) {
$this->httpCodes(403);
die('Permission denied.');
}
Я заметил, что в Item->canView()
$this->data['Site']
заполняются данные столбца из таблицы сайта. Но это просто массив, а не объект.
С другой стороны, $this->Site
является объектом Site, но он не был заполнен данными столбца из таблицы сайта, такими как $this->data
.
Как правильно CakePHP получить ассоциированную модель как объект (чтобы я мог вызывать методы для него) и содержащий данные? Или я все об этом говорю не так?
Спасибо!