Доктрина Codeigniter много-много отношений - PullRequest
1 голос
/ 03 августа 2011

У меня три таблицы.

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

1 Ответ

0 голосов
/ 03 августа 2011

Параметр refclass в классах User и Group, скорее всего, должен быть UserGroup, а не UserGroups (Doctrine не понимает разницу между единственным и множественным числом). Вы также должны вызывать метод parent :: setUp () в каждом из методов setup (), которые вы объявляете.

В официальном руководстве содержится огромное количество документации о многих отношениях. (Который использует отношение группы пользователей в качестве примера)

EDIT:

Я заметил некоторые серьезные проблемы с кодом при повторном прохождении:

  • В вашей таблице UserGroup есть столбец article_id, но нет столбца group_id.
  • Заявленное отношение к модели Group под именем Groupss, что делает отношение $user->Group неизвестным.
  • Наконец, вы должны назначить пользователя массиву групп, например $user->Groups[] = $group
...