在模型上設置關聯時。 CakePHP在運行時對它進行實例化,並將其設置爲該模型的Object屬性。
class User extends AppModel
{
public $hasMany = array('Document');
}
class Document extends AppModel
{
}
在上面的例子中。 User
對象將包含名爲Document
的屬性,但Document
將不包含User
。
class UsersController extends AppController
{
public $uses = array('User');
public function index()
{
$this->User-find(...); // works
$this->User->Document->find(..); // works, because of the hasMany
$document = ClassRegistry::init('Document');
$document->User->find(...); // does not work, not associated to User.
}
}
另外,請記住,屬性的名稱是關聯的別名。不是模型的名稱。
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document')
);
}
class Document extends AppModel
{
}
這改變了屬性名稱Paper
$this->User->Paper->find(..); // works as alias
用途上關聯的別名,可以應用找到條件,使他們產生不同的結果。
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document','conditions'=>array(....)),
'Resume'=>array('className'=>'Document','conditions'=>array(....))
);
}
這將爲User
模型創建兩個屬性,如下所示。
$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias
但是,在條件上User
模型來進行查找時,才適用。
這是有幫助的,並解釋何時可以使用。但我仍然不清楚它究竟在做什麼。換句話說,如果有的話,返回的數據是如何影響的? – emersonthis
如果我具體問一下,可能會更清楚:正在搜索哪個模型?鏈中的最後一個?或者正在搜索? '$ this-> User-> Paper-> find('all')'是否會返回所有文檔?或文件和用戶? – emersonthis
'$ this-> User-> Document == $ this-> Document'爲true。這兩個對象是'Document'模型的同一個實例。 Cake將'Document'作爲成員屬性設置爲'User'以方便訪問。在你的控制器中,你不必說'uses = array('User','Document')'。由於'用戶'已經有了'文檔'的引用。你也不需要在'User'模型中調用'ClassRegistry :: init('Document')'。 – cgTag