Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CakePHP] relacje
kicaj
post 10.01.2009, 02:27:55
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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?

Ten post edytował kicaj 10.01.2009, 02:30:52


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Rafal Filipek
post 10.01.2009, 12:25:42
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kicaj
post 10.01.2009, 12:32:42
Post #3





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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'

Ten post edytował kicaj 10.01.2009, 12:34:18


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
Rafal Filipek
post 10.01.2009, 13:12:24
Post #4





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
kicaj
post 12.01.2009, 01:37:11
Post #5





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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?

Ten post edytował kicaj 12.01.2009, 01:38:09


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
Rafal Filipek
post 12.01.2009, 20:46:33
Post #6





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


Nie rozumiem jak to automatycznie ? musisz zdefiniowac model podczas tworzenia komentarza lub jego zapisywania lub w formularzu.
Go to the top of the page
+Quote Post
kicaj
post 12.01.2009, 20:50:55
Post #7





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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:)


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 15:29