没问题,只是一个关于良好代码编写的问题。我还在学习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,也不知道推荐哪种编程方法,哪些不是。
答案 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 />";
}