Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] relacje
Forum PHP.pl > Forum > PHP > Frameworki
kicaj
Probuje stworzyc relacje w ten sposob:
Kod
Article hasOne User
User hasMany Article
User hasMany Comments
Articles hasMany Comments


Tabela 'comments' chcialbym zeby wygladala mniej wiecej tak:
Kod
id
content
user_id
model
foreign_key
...


Przykladowe wiersze w tabeli 'comments':
Kod
1, 'Witaj kolego!' 123, User, 3        // user_id=123 dodal komentarz do uzytkownika o id=3
2, 'Dobry artykul!', 234, Article, 42    // user_id=234 dodal komentarz do artykulu o id=42


Czy to jest dobry sposob dla tabeli 'comments', dobre rozumowanie.
I w jaki sposob mialby dzialac model Comment?
Rafal Filipek
oczywiscie mozna wrzucic wszystkie komentarze do jednej tabeli ale nie wiem czy ma to sens. raz ze mieszasz ze soba rozne komentarze ( jakby nie bylo jedne dotyczna tekstow a inne uzytkownikow ) a 2 ze moze ci sie tego zrobic strasznie duzo w tabeli. Skoro masz komentarze dla uzytkownikow i tekstow to zrob 2 tabele users_comments i articles_comments i wtedy nie ma problemu bo robisz sobie najprostrze relacje. do tego nie bedziesz mial problemu jezeli bedziesz chcial wyciagnac np. jednoczesnie 10 ostatnich komentarzy dla uzytkownika i 10 ostatnich komentarzy dla jego tekstow czy cos w tym stylu. czasami jest lepiej zrobic 1 dodatkowa tabele 1 dodatkowy model z ktorym i tak nigdy nie bedziesz mial problemu a zawsze bedziesz mial mozliwosc jakiejs modyfikacji.
kicaj
Jednak wolalbym zostac przy jednej tabeli, komentarze beda uzywane do wiece niz dwoch podanych modeli, wiec niechcialbym do prawie kazdnego modelu stwarzac dodatkowa tabele: nazwamodelu_comments.
Co do wyswietlania do wolabym wtedy wyswietlic "10 komentarzy dodanych w serwisie", a juz w linkach bedzie podzial czy do arta, usera, czy jeszcze gdzie indziej.

Nie widze sensu tworzyc kilka identycznych tabel i kilka identycznych modeli, ktore dzialaja identycznie, zasada DRY:)

Tylko teraz jak zbuduje tabele 'comments' jak juz mowilem, z polem 'model' i 'foreign_key', wiec jak zmusic Cake zeby korzystal z tej tabeli prawidlowo (wstawial w 'model' odpowiednio: Article, User, itd.) oraz zeby caly czas zachowane byly relacje typu 'User hasMany Comment'
Rafal Filipek
no to ok, wiec zrobil bym to tak
Kod
tabela comments
---------------
id
content
model
model_id


i teraz tak
  1. <?php
  2. class Article extends AppModel{
  3.    public $hasMany = array(
  4.        'Comment' => array(
  5.            'foreignKey' => 'model_id',
  6.            'conditions' => array('Comment.model' => 'Article')
  7.        )
  8.    );
  9. }
  10. ?>


i tak samo dla userow

a model Comment
  1. <?php
  2. class Comment extends AppModel{
  3.    public $belongsTo = array(
  4.        'Article' => array(
  5.            'foreignKey' => 'model_id',
  6.            'conditions' => array('Comment.model' => 'Article')
  7.        ),
  8.        'User' => array(
  9.            'foreignKey' => 'model_id',
  10.            'conditions' => array('Comment.model' => 'User')
  11.        )
  12.    );
  13. }
  14. ?>
kicaj
Czy automatycznie powinno pojawic sie pole 'Comment.model' w $this->data?
Bo sie nie pojawia...

A recznie $this->data['Comment']['model'] = 'Article' mija sie chyba z celem?
Rafal Filipek
Nie rozumiem jak to automatycznie ? musisz zdefiniowac model podczas tworzenia komentarza lub jego zapisywania lub w formularzu.
kicaj
No chyba to jedyne rozwiazanie
Myslalem ze moze jakos tak automatycznie jak to robi 'foreignKey' w relacjach - sam wylapuje i myslalem ze moze dla 'model' tez tak mozna:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.