How to fetch populated associated models in CakePHP when calling read()
- by Code Commander
I have the following Models:
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);
}
}
and
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);
}
}
In my controller I am doing something like this:
$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.');
}
I notice that in Item->canView() $this->data['Site'] is populated with the column data from the site table. But it merely an array and not an object.
On the other hand $this->Site is a Site object, but it has not been populated with the column data from the site table like $this->data.
What is the proper way to have CakePHP get the associated model as the object and containing the data? Or am I going about this all wrong?
Thanks!