Как проверить, есть ли в записях доктрины какие-либо отношения, которые используются - PullRequest
0 голосов
/ 20 мая 2010

Я использую таблицу доктрин, которая имеет несколько необязательных отношений (типов Doctrine_Relation_Association и Doctrine_Relation_ForeignKey) с другими таблицами. Как я могу проверить, имеет ли запись из этой таблицы связи с записями из связанной таблицы.

Вот пример, поясняющий мой вопрос. Предположим, что у вас есть пользователь, и пользователь имеет отношение многие ко многим с группами пользователей, и пользователь может иметь одну роль пользователя Как я могу проверить, является ли данный пользователь частью какой-либо группы или имеет какую-либо роль.

Решение начинается, я полагаю, с

$relations = Doctrine_Core::getTable('User')->getRelations();
$user = Doctrine_Core::getTable('User')->findOne(1);
foreach($relations as $relation) {
    //here should go a test if the user has a related record for this relation
    if ($relation instanceof Doctrine_Relation_Association) {
       //here the related table probably has more then one foreign key (ex. user_id and group_id)    

    }
    if ($relation instanceof Doctrine_Relation_ForeignKey) {
        //here the related table probably has the primary key of this table (id) as a foreign key (user_id)
    }
}

//true or false
echo $result 

Я ищу общее решение, которое будет работать независимо от того, сколько существует отношений между пользовательскими и другими таблицами.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 мая 2010
$user_id = // the user

$q = Doctrine_Query::create()
   ->select('ug.group_id')
   ->from('User u, u.UserGroup ug')
   ->where('u.user_id = ?', $user_id);
$results = $q->execute(array(), Doctrine_Core::HYDRATE_NONE);
foreach($results as $result) $relations[] = $result[0];
$relations = // simple array of group_ids the user belongs to

Или, если это просто Да / Нет, вам нужно:

$q = Doctrine_Query::create()
   ->select('COUNT(ug.group_id)')
   ->from('User u, u.UserGroup ug')
   ->where('u.user_id = ?', $user_id);
$results = $q->execute(array(), Doctrine_Core::HYDRATE_NONE);
$relation_exists = ($results[0][0]) ? true : false;
0 голосов
/ 30 марта 2013

Я знаю, что это старый вопрос, но он может быть полезен кому-то еще, а может, даже вам. Я думаю, что вы искали метод relatedExists(), который вы можете найти здесь: http://docs.doctrine -project.org / проекты / doctrine1 / о / последняя / ы / ручной / рабочий-с models.html # клиринг связанный-запись

Надеюсь, это будет полезно!

0 голосов
/ 20 мая 2010

Я новичок в Доктрине, но попробуйте это:

$relations = Doctrine_Core::getTable('User')->getRelations();
$user = Doctrine_Core::getTable('User')->findOne(1);
foreach($relations as $name => $relation) {
    //here should go a test if the user has a related record for this relation
    if($user->relatedExists($name)) {
       echo "this user is associated with some $name";
    }
}
...