Temat: Find HABTM

Hej, mam takie podsumowujące pytanie bo pewnie byl juz taki temat gdzies:

Jaki macie najprostrzy sposob na szukanie rekordow z HABTM bo prawde mowiac powoli przestaje widziec sens takiego definiowania polaczen.

Mnie najproscej jest zbindowac nowa relacje (hasOne) np ArticlesHasTags i szukanie :

Article->find(ArticleHasTags.id => 1)

lub uzywac recursive = 1v2 i szukac:

Article->Tags->find(id = 1)

Tyle ze poco wtedy jest ten HABTM (oprocz znaczego uproszczenia przy zapisie do bazy)?

Ostatnio edytowany przez duke_piotr (2009-08-31 12:46:45)

2

Odp: Find HABTM

Może zainteresuje Cię behavior Containable...

3

Odp: Find HABTM

Moze sie tak zdazyc ze mnie to zainteresuje smile

Dzieki smile

mam jednak w zwiazku z tym pytanie:

$this->data = $this->Article->find('all', array(
    'contain'        => array(
        'Tag' => array(
            'conditions' => 'Tag.id = 2'))
));

Takie cos zwraca mi wszystkie rekordy article (okolo 9). Te ktore nie posiadaja Tag.id =2 są również wyświetlane ale posiadają puste złączenie (dolączona tabela Tag jest pusta).

[1] => Array
        (
            [Article] => Array
                (
                    [id] => 2
                    [aka] => pierwsze_kroki
                    [title] => Pierwsze kroki
                    [addingDate] => 2009-07-29 00:00:00
                    [alterDate] => 2009-08-28 14:38:03
                    [thisStatus] => ACTIVE
                )

            [Tag] => Array
                (
                )

        )

Gdy skopiuje zapytanie ktore jest wykonywane i wkleje bezposrednio do MySql to dostaje prawidlowa liczbe rekordow (okolo 3).
.
Pytanie: Co zrobic alby Cake nie pokazywal tych Article ktore maja puste Tag (tzn Tag.id rozne od 2)

PS: Article HABTM Tag

Ostatnio edytowany przez duke_piotr (2009-09-01 14:15:32)

4

Odp: Find HABTM

obydwa modele musze zawierac ten bahavior - mozesz go dodac do app model i po problemie.
W liscie pol do wybrania musza byc podane wszytskie pola ktore sa kluczami obcymi dla modelu nadrzednego.

5

Odp: Find HABTM

No wlasnie maja ;/

Gdzies szukajac odpowiedzi natknalem sie ze jest to niedoskonalosc behaviora i zeby usuwac zbedne wyniki przez afterFind lub stosowac metode 'joins' w zapytaniach ;/

Ostatnio edytowany przez duke_piotr (2009-09-02 10:53:19)

6

Odp: Find HABTM

Nie mam zielonego pojecia czy bedzie to w ogole dzialac ...ale mozna sprobowac tak ....

$this->data = $this->Article->find('all', array(
    'contain'        => array(
        'ArticleHasTags' => array(
          ...
              'Tag' => array(
               .....
              ),              
          ...
        ),
...
);

edit ...
ewentulanie mozesz bindowac w locie podajac odpowiednie warunki przy definiowaniu habtm.

Ostatnio edytowany przez robal77 (2009-09-03 00:38:35)