【问题标题】:codeigniter doctrine many to many relationships多对多关系的codeigniter原则
【发布时间】:2011-08-02 21:21:48
【问题描述】:

我有三张桌子。

User
  id
Group
  id
UserGroup
  user_id
  article_id
  date_joined

现在我有三个独立的模型来建立关系。

// 用户模型

<?php
class User extends Doctrine_Record
{
    // define table columns in this function
    public function setTableDefinition() {

    }

    // setup some options
    public function setUp() {

        $this->hasMany('Group as Groupss', array(
                'local' => 'user_id',
                'foreign' => 'group_id',
                'refClass' => 'UserGroup'
        ));

        // causes 'created_at' and 'updated_at' fields to be updated automatically
    $this->actAs('Timestampable');
    }
}

// 组模型

<?php

class Group extends Doctrine_Record
{
    // define table columns in this function
    public function setTableDefinition() {

    }
        $this->hasMany('User as Users', array(
                'local' => 'group_id',
                'foreign' => 'user_id',
                'refClass' => 'UserGroup'
        ));     

    }
}

// 用户组

<?php

class UserGroup extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('user_id', 'integer', 4, array(
                'primary' => true
            )
        );

        $this->hasColumn('achievement_id', 'integer', 4, array(
                'primary' => true
            )
        );
        $this->hasColumn('date_completed', 'timestamp', 25);
    }
}

现在我要做的就是在我的控制器内部建立关系:

    $user        =      Doctrine::getTable('User')->findOneByEmail('abcd123@gmail.com');
    $group =        Doctrine::getTable('Group')->findOneByID('1');

    $user->Group = $user;

两个 SQL 命令都返回一个结果,当我运行控制器时出现以下错误:

Fatal error: Uncaught exception 'Doctrine_Record_UnknownPropertyException' with message 'Unknown record property / related component "User" on "Group"' in

【问题讨论】:

    标签: php codeigniter doctrine many-to-many


    【解决方案1】:

    User 和 Group 类中的 refclass 选项很可能是 UserGroup 而不是 UserGroups(Doctrine 不理解单数和复数之间的区别)。您还应该在您声明的每个 setup() 方法中调用 parent::setUp() 方法。

    the official manual 中有大量关于多对多关系的文档。 (以用户组关系为例)

    编辑:

    我在再次查看代码时发现了一些严重的问题:

    • 您的UserGroup 表有一个article_id 列,但没有group_id 列。
    • 在名称 Groupss 下声明与 Group 模型的关系,这使得关系 $user-&gt;Group 未知。
    • 最后,您应该将用户分配给一组组,例如$user-&gt;Groups[] = $group

    【讨论】:

    • UserGroups 的复数形式实际上是我的 stackoverflow 帖子中的一个错字(并且已更新)。您发送给我的指南是我所遵循的指南,这就是为什么我不确定我是否收到错误的原因。我注意到在教程中他们使用“class User extends BaseUser”也许这与它有关?
    • 还值得注意的是,我在关系表中添加了一列 (date_completed)
    • BaseUser 是由 Doctrine 生成的一个类,它反映了 YAML 配置在给定时间包含的所有信息。这只是代码分离的问题,所以我无法想象这会是问题的根源。您能否尝试在与 YAML 配置不同的目录中生成模型,看看有什么不同?
    • 我所有的模型都是手工生成的,并没有使用 YAML 来构建它们
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 2014-05-18
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多