Php ActiveRecord和多对多关系?
我正在尝试将活动记录模式实现到ZF项目中。 我以前也用过类似的方法,效果很好 但我现在的问题是,如何处理与我的模型的多对多关系 以下是一个例子: 假设我有一个用户模型Php ActiveRecord和多对多关系?,php,zend-framework,activerecord,many-to-many,Php,Zend Framework,Activerecord,Many To Many,我正在尝试将活动记录模式实现到ZF项目中。 我以前也用过类似的方法,效果很好 但我现在的问题是,如何处理与我的模型的多对多关系 以下是一个例子: 假设我有一个用户模型 <?php require_once 'MLO/Model/Model.php'; class Model_User extends MLO_Model_Model { protected $_data = array( 'id' => NULL, 'email' =&g
<?php
require_once 'MLO/Model/Model.php';
class Model_User extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'email' => NULL,
'password' => NULL,
);
}
及
然后我有一个映射器,它将结果从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"
}
}
还有别的想法吗
附言:我不是想处理ACL或类似的事情,只是举个例子。让我们把你的问题转化为post标签-一篇文章有很多标签,一个标签用于很多文章-这很容易理解(至少对我来说):
我会按照您的建议向页面的$u数据添加['tags']。它将是一组经过调整的标记对象。类似地,对于标签,我会添加带有调整页面的['pages']。但是我当然会使用延迟加载 让我们把你的问题转化为帖子标签——一篇帖子有很多标签,一个标签用于很多帖子——这很容易理解(至少对我来说):
我会按照您的建议向页面的$u数据添加['tags']。它将是一组经过调整的标记对象。类似地,对于标签,我会添加带有调整页面的['pages']。但是我当然会使用延迟加载 Zend_Db_表内置了此功能:) 它使用自己的“dependentTables”和“referenceMap”概念来管理表关系,如果数据库不支持引用约束,它甚至可以为您执行级联和删除操作
Zend_Db_表内置了此功能:) 它使用自己的“dependentTables”和“referenceMap”概念来管理表关系,如果数据库不支持引用约束,它甚至可以为您执行级联和删除操作
那么您将分别为页面和标签(或我的示例中的用户和组)分配各自的标签和页面?,并在数组中传递类名以延迟加载标签/页面对象?使用包含标记/页面对象的集合对象有什么问题?当然可以使用集合…:)这是完全一样的-我只是习惯了这样做,sry。。。问题是您可以进入无限循环(每个页面对象需要标签的页面的加载标签,它们被加载,并且每个标签都有页面,加载页面…),这就是为什么需要延迟加载。此外,我还建议使用某种缓存来存储结果,因为它可能会占用大量数据库:),因此您可以同时为页面和标记(或者在我的示例中为用户和组)分配各自的标记和页面?,并在数组中传递类名以延迟加载标记/页面对象?使用包含标记/页面对象的集合对象有什么问题?当然可以使用集合…:)这是完全一样的-我只是习惯了这样做,sry。。。问题是您可以进入无限循环(每个页面对象需要标签的页面的加载标签,它们被加载,并且每个标签都有页面,加载页面…),这就是为什么需要延迟加载。我还建议使用某种缓存来存储结果,因为它可能会占用大量数据库:)
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"
}
}