学说查询和访问关系

时间:2011-09-23 19:14:53

标签: symfony1 doctrine

没问题,只是一个关于良好代码编写的问题。我还在学习Symfony + ORM,在这些框架中没有方向。

我的数据库表中有User(带登录列)和Account(也有登录列,与用户登录不同)。

一位用户(由ID标识为数据库,登录时为登录)有多个帐户(也可通过ID和登录识别,作为帐户名称)。因此,schema.yml中的关系是:

Account:
(...)
relations:
  idUser:
    class: User
    local: id_user
    foreign: id_user
    foreignAlias: Accounts

现在,我正尝试以下列方式访问与一个用户登录相关的所有帐户登录信息(假设我现在只显示当前用户的帐户登录列表):

        /* $u = login-name of the current user */
        $q = Doctrine::getTable('User')->
                createQuery('u')->innerjoin('u.Accounts a WITH u.login=?', $u)->execute();
        foreach($q[0]->Accounts as $v) {
            echo $v->login . "<br />";
        }

此代码非常有效。然而,我现在想知道的是,这不是丑陋或不是实现这一目标的最佳方法吗?就像我说的那样,我在Symfony中没有太多的orienatation,也不知道推荐哪种编程方法,哪些不是。

1 个答案:

答案 0 :(得分:0)

这对我来说并不是那么糟糕,但我已经这样写了:

/* $login = login-name of the current user */
/* Always use ModelTable::getInstance() instead of Doctrine::getTable : 
   your IDE will give you better auto-completion if the doc block of the
   getInstance has a correct @return annotation.
   You will have all the methods of ModelTable in your auto-completion */
$users = UserTable::getInstance() 
  ->createQuery('u')
    ->innerjoin('u.Accounts a WITH u.login = ?', $login) 
      ->execute(); //Try to align opening parenthesis when writing DQL, it is easier to read

foreach ($users[0]->Accounts as $v) // egyptian brackets are for java(script) programmers
{
  echo $v->login . "<br />";
}