Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ActiveRecord和多对多关系?_Php_Zend Framework_Activerecord_Many To Many - Fatal编程技术网

Php ActiveRecord和多对多关系?

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

我正在尝试将活动记录模式实现到ZF项目中。 我以前也用过类似的方法,效果很好

但我现在的问题是,如何处理与我的模型的多对多关系

以下是一个例子:

假设我有一个用户模型

<?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"
  }
}