я использую доктрину, и я настроил несколько тестовых таблиц для генерации в моделях:
Я хочу модели отношений «многие ко многим» (3 таблицы преобразованы в 3 модели)
(все упрощено, чтобы прояснить суть)
MySQL таблиц:
user:
id INT // primary key
name VARCHAR
group:
id INT // primary key
name VARCHAR
user_group:
user_id INT // primary and foreign key to user.id
group_id INT // primary and foreign key to group.id
Я думал, что он сгенерирует эти модели (из документации):
// User.php
class User extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('id');
$this->hasColumn('name');
}
public function setUp()
{
$this->hasMany('Group' as 'Groups', array(
'refClass' => 'UserGroup',
'local' => 'user_id',
'foreign' => 'group_id'
)
);
}
}
// Group.php
class Group extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('id');
$this->hasColumn('name');
}
public function setUp()
{
$this->hasMany('User' as 'Users', array(
'refClass' => 'UserGroup',
'local' => 'group_id',
'foreign' => 'user_id'
)
);
}
}
// UserGroup.php
class UserGroup extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('user_id')
);
$this->hasColumn('group_id')
);
}
}
но это породило это:
// User.php
abstract class BaseUser extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('id');
$this->hasColumn('name');
}
public function setUp()
{
$this->hasMany('UserGroup', array(
'local' => 'id',
'foreign' => 'user_id'));
}
}
// Group.php
abstract class BaseGroup extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('id');
$this->hasColumn('name');
}
public function setUp()
{
$this->hasMany('UserGroup', array(
'local' => 'id',
'foreign' => 'group_id'));
}
}
// UserGroup.php
abstract class BaseUserGroup extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('user_id');
$this->hasColumn('group_id');
}
public function setUp()
{
$this->hasOne('User', array(
'local' => 'user_id',
'foreign' => 'id'));
$this->hasOne('Group', array(
'local' => 'group_id',
'foreign' => 'id'));
}
}
Как видите, в моделях «Пользователь» и «Группа» отсутствует «refClass», указывающий на «Группу пользователей». в этом случае таблица «UserGroup» - это просто еще одна таблица с точки зрения Doctrine, а не типичная справочная таблица.
обычно, если это правильно, как первый, который вы можете сделать так:
$user = new User();
$user->group[1]->name = 'group 1';
$user->group[2]->name = 'group 2';
теперь вы не можете вызвать пользователя, связанного не напрямую с группой, а с группой пользователей.
Я проверил свои определения таблиц в mysql. Они верны. У user_group есть 2 столбца (первичные ключи и внешние ключи), каждый из которых указывает на первичный ключ пользователя или группы.
Но я хочу стандартные модели отношений «многие ко многим» в моделях Doctrine.
Буду признателен за помощь. Я изо всех сил пытался понять это в течение половины дня.
Что не так?
Спасибо!