2011-09-23 4 views
1

좋은 코드 작성에 관한 문제입니다. 나는 여전히 Symfony + ORM을 배우고 있으며이 프레임 워크에는 방향이 없습니다.교리를 이용한 질의 및 접근

내 데이터베이스 테이블에 사용자 (로그인 열 포함) 및 계정 (사용자의 로그인 열과는 다른 로그인 열이 있음)이 있습니다. (로그인에 대한 데이터베이스 및 로그인에 의해 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에서 프로그래밍이 거의없고, 어떤 프로그래밍 방법이 권장되는지, 어떤 프로그래밍 방법이 그렇지 않은지를 알지 못합니다.

답변

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 />"; 
}