2015-05-19 11 views
17

Czy ktoś może wskazać mi właściwy kierunek, aby zrobić coś podobnego do użytkownika. Mam 3 tabele: użytkownicy, user_follows i posty."Użytkownik podąża" za PropelORMem - Trójstronna relacja

W przypadku nawodnienia obiektu użytkownika mogę uzyskać tablicę identyfikatorów użytkowników, których obserwują ... a obiekt postu wie, który użytkownik go opublikował ... ale stara się uzyskać posty dla użytkowników, których dany użytkownik obserwuje .

Obecnie ma to, który zwraca posty od wszystkich.

$posts = PostsQuery::create() 
     ->orderByDate('desc') 
     ->limit('12') 
     ->find(); 
    return $posts; 

trzeba zrobić filterByXXX() ...

+1

spróbuj tego: https://groups.google.com/forum/#!topic/propel-development/UG-7T3dK2Wg –

+0

pewno pomógł mi na zewnątrz. Wskazał mi właściwy kierunek, dzięki! –

Odpowiedz

1

Propel ORM nie obsługuje wiele-do-wielu relacji między jednostkami tej samej tabeli. Ale możesz użyć EqualNestBehavior, aby działało.

Z tego kodu może wyglądać następująco:

$user = UsersQuery::create()->findPk($userId); 

$follows = $user->getFollows(); 

$posts = PostsQuery::create() 
     ->filterByUser($follows) 
     ->orderByDate('desc') 
     ->limit('12') 
     ->find(); 

I tu jest odpowiednia część schematu:

<table name="follow"> 
    <behavior name="equal_nest"> 
    <parameter name="parent_table" value="users" /> 
    </behavior> 
    <!-- you do not need to specify any colums for the "follow" table, the behavior will add them automatically --> 
</table> 
1

Można to łatwo zrobić za pomocą use*Query.

$posts = PostsQuery::create() 
    ->useUserFollowsQuery() 
     ->filterByUserId([12,34,55]) 
    ->endUse() 
    ->orderByDate('desc') 
    ->limit('12') 
    ->groupById() //important if you join a one-to-many relation 
    ->find(); 
return $posts; 

Zapytanie zoptymalizowane jest użycie addJoinCondition:

->innerJoinUserFollows() 
->addJoinCondition('UserFollows', 'UserFollows.user_id = ?',[123,34], Criteria::IN) 
Powiązane problemy