我正在嘗試將活動記錄模式實現爲ZF項目。 我曾經與之前的類似工作合作過,效果很好。ActiveRecord和多對多的關係?
但現在我的問題,是關於如何處理多到很多與我的模型關係。
下面是一個例子:
比方說,我的用戶模型。
<?php
require_once 'MLO/Model/Model.php';
class Model_User extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'email' => NULL,
'password' => NULL,
);
}
沒問題。
但是如果我添加組模型?
require_once 'MLO/Model/Model.php';
class Model_Group extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'name' => NULL,
'desc' => NULL,
);
}
和
require_once 'MLO/Model/Collection.php';
class Model_Groups extends MLO_Model_Collection
{
protected $_modelClass = 'Model_Group';
}
我然後映射器,其轉換結果從DB來建模對象,反之亦然。
我的問題是,如何處理多到很多與我的模型的關係?
我應該在哪裏「保存關係」?
下面是一些線索,我想:
class Model_User extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'name' => NULL,
'desc' => NULL,
'groups' => NULL, // where groups will be an instance of the Model_Groups
);
}
用同樣的方法,其中基團會像一個數組:
array(3) {
[0]=>
array(3) {
["id"]=>
string(1) "9"
["name"]=>
string(1) "Guest"
["desc"]=>
string(1) "Some desc"
}
[1]=>
array(3) {
["id"]=>
string(1) "64"
["name"]=>
string(1) "Moderator"
["desc"]=>
string(1) "Some desc"
}
[2]=>
array(3) {
["id"]=>
string(1) "5"
["name"]=>
string(1) "Admin"
["desc"]=>
string(1) "Some desc"
}
}
另一個想法?
P.S:我並不想處理ACL或類似的東西,它只是一個例子。
所以你可以分配頁面和標籤(或者在我的例子中的用戶和組)來分別標記和頁面?,並傳遞數組中的類名來延遲加載標籤/頁面對象? 使用包含標籤/頁面對象的集合對象有什麼問題? – 2009-09-25 08:03:03
當然,你可以使用集合... :)它是完全一樣的 - 我只是習慣這樣做,sry ...問題是你可以進入無限循環(爲頁面加載標籤每個頁面對象需要標籤,它們被加載並且每個標籤都有頁面,加載頁面...),這就是爲什麼需要延遲加載。此外,我會建議使用某種緩存來存儲結果,因爲它可能會得到相當密集的數據庫:) – 2009-09-25 12:47:57