Я хочу выполнить несколько самостоятельных объединений с Doctrine 1.2
У меня есть 2 таблицы
"объекты":
----------------------------------------------------
| id | user_id | objectname
|--------|-----------|------------------------------
| 1 | 2 | object1
| 2 | 2 | object2
| 3 | 3 | object3
| 4 | 4 | object4
| 5 | 5 | object5
----------------------------------------------------
и "пользователи"
----------------------------------------------------
| id | parentuser_id | username
|--------|---------------|--------------------------
| 2 | 1 | firstname
| 3 | 2 | firstname2
| 4 | 2 | firstname3
| 5 | 4 | firstname4
----------------------------------------------------
Любой пользователь может иметь много подпользователей, и подпользователи могут также иметь много подпользователей и т. Д. ...
Я выполняю самосоединения, чтобы получить объекты user.id = 2 и их подпользователей, но только для одного подуровня.(user и там subuseres, а не sububusers).
BaseUser.php выглядит следующим образом:
abstract class BaseCustomer extends Doctrine_Record
{
public function setTableDefinition()
{
$this->setTableName('user');
$this->hasColumn('id', 'integer', 4, array(
'type' => 'integer',
'length' => 4,
'fixed' => false,
'unsigned' => false,
'primary' => true,
'autoincrement' => true,
));
$this->hasColumn('parentuser_id', 'integer', 4, array(
'type' => 'integer',
'length' => 4,
'fixed' => false,
'unsigned' => false,
'primary' => false,
'notnull' => false,
'autoincrement' => false,
));
$this->hasColumn('username', 'string', 100, array(
'type' => 'string',
'length' => 100,
'fixed' => false,
'unsigned' => false,
'primary' => false,
'notnull' => false,
'autoincrement' => false,
));
}
public function setUp()
{
parent::setUp();
$this->hasMany('User', array(
'local' => 'id',
'foreign' => 'parentuser_id'));
$this->hasOne('User as Subuser', array(
'local' => 'parentuser_id',
'foreign' => 'id'));
}
В ObjectController.php я могу сгенерировать объект-запрос с помощью
$query-> ...;
$query->andWhere('user_id = ? OR Object.User.Subuser.id = ? ', array($user->id, $user->id));
Это генерирует SQL-запрос следующим образом:
SELECT *
FROM object o
LEFT JOIN user u
ON o.user_id = u.id
LEFT JOIN user u2
ON u.parentuser_id = u2.id
WHERE ( o.user_id = 2
OR u2.id = 2
)
Правильно, но при этом выдаются только объекты пользователя с id = 2 и пользователя с parent_user_id = 2.
Результат:
----------------------------------------------------
| id | user_id | objectname
----------------------------------------------------
| 1 | 2 | object1
| 2 | 2 | object2
| 4 | 4 | object4
----------------------------------------------------
Но мне также нужен объект подпользователей подпользователей (в примере также object.id 3 и 5).Как мне это сделать?Как я могу изменить BaseUser.php и запрос?
Результат sql должен выглядеть следующим образом:
SELECT *
FROM object o
LEFT JOIN user u
ON o.user_id = u.id
LEFT JOIN user u2
ON u.parentuser_id = u2.id
LEFT JOIN user u3
ON u2.parentuser_id = u3.id
WHERE ( o.user_id = 2
OR u2.id = 2
OR u3.id = 2
)
Спасибо за помощь.