Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][Doctrine] jak poprawnie definiować relacje w schema.yml
zniviash
post 15.09.2011, 14:09:33
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.09.2011

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


Witam,
chciałem zapytać jak należy definiować relacje w schema.yml?
czy należy wszędzie definiować relacje, tzn, jeżeli 'Artykul' ma relacje do 'Autor' to należy również zadbać o odwrotną relację w pliku schema.yml?
plik schema u mnie wygląda następująco:

Kod
---
detect_relations: true
options:
  collate: utf8_polish_ci
  charset: utf8
  type: InnoDB
Artykul:
  tableName: artykul
  columns:
    idArtykul:
      primary: true
      type: integer(4)
      notnull: true
      autoincrement: true
    tytul:
      type: string(45)
    autorId:
      type: integer(4)
      notnull: true
  relations:
    Autor:
      local: autorId
      foreign: idAutor
      foreignAlias: artykuly
Autor:
  tableName: autor
  columns:
    idAutor:
      primary: true
      type: integer(4)
      notnull: true
      autoincrement: true
    nazwa:
      type: string(100)
    relation:
      Artykul:
        local: idAutor
        foreign: autorId


jak pobrać artykuły wraz z ich autorami? próbowałem podobnie jak w jobeet ale za każdym razem otrzymuję inny błąd,
ostatnie wypociny to:
plik: ArtykulTable.class.php
  1. public function getArticles(){
  2. $q = $this->createQuery('art')->leftJoin('art.artykuly au ON art.autorid = autor.idautor')->execute();
  3. return $q;
  4. }

Kod
500 | Internal Server Error | Doctrine_Table_Exception
Unknown relation alias artykuly


może ktoś polecić jakąś książkę? mam "symfony w przykładach" i "programowanie z wykorzystaniem Symfony, CakePHP, Zend Framework"
ale obydwie opierają się o propel'a.
wiem że Polskich niema, ale to żaden problem, może być po angielsku.

poradziłem sobie już z joinem, ale pozostaje kwestia jak opisywać relacje i czy możecie polecić jakieś książki smile.gif
Go to the top of the page
+Quote Post
crafter
post 15.09.2011, 21:55:23
Post #2





Grupa: Zarejestrowani
Postów: 72
Pomógł: 2
Dołączył: 14.02.2007

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


Witaj
Jeśli definiujesz relację jeden do wielu czyli autor może mieć jeden lub więcej artykułów to musisz w Autor odpowiednio to zdefiniować:
Kod
Autor:
  relations:
     Artykul:
        local: idAutor
        foreign: autorId
        type: many
a w Artykul
Artykul:
  relation:
    Autor:
       local: autorId
       foreign: idAutor
       type: one


Jeśli używasz doctrine wtedy wygenerujesz model który powiąże Autora z arykułami czyli jesli pobierzesz obiekt autora i zrobisz na nim metodę getArticle() wtedy pobierzesz wszystkie artykuly należące do tego autora. W skrócie wyglądałoby to tak:
  1. $autor = AutorTable::getInstance()->find(1); //zwraca obiekt autora o id=1
  2. $article = $autor->getArticle(); //zwraca kolekcje arykulow


Jeśli chcesz pobrać artykuły wraz z ich autorami w modelu robisz np tak:
Model - AutorTable:

  1. //metoda pobiera autora o jakims id
  2. public static function getAutor($id) {
  3. $q = Doctrine_Query::create()
  4. ->select('a.*')
  5. ->from('Autor a')
  6. ->where('a.idAutor = ?',$id);
  7. return $q->execute();
  8.  
  9. }


teraz w module jakiejs akcji robisz:
  1. $autor = AutorTable::getAutor(1);
  2. $autor->loadRelated('Artykul');

w ten sposób pobierzesz sobie obiekt autora a w nim obiekty jako kolekcje artykulow przypisanych dla tego autora.

Albo ostatni sposób to poprostu zapytanie w modelu z innerJoin i leftJoin

Pisałem z palca więc moga być literóki w kodzie albo błędy.
pozdraiwam




Go to the top of the page
+Quote Post
zniviash
post 16.09.2011, 07:42:16
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.09.2011

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


dzięki za świetną odpowiedź.
rozpoczynam naukę symfony i na razie biegam trochę po omacku:] przy Zendzie było prościej biggrin.gif
a tutaj wszech ogarniające magiczne generatory.

ruszyłem z dokumentacją doctrine. bardzo pomogł fragment tłumaczący że to zapytania DQL i nie należy ich traktować jak SQL smile.gif

jeżeli znasz jakiegoś bloga o symfony proszę napisz, obecnie szukam wszelkich materiałów, przy zendzie tego było sporo, a w tym temacie jakośniemogę za dużo znaleźć ;/

pozdrawiam
Go to the top of the page
+Quote Post
bikerszymek
post 16.09.2011, 08:13:47
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 13
Dołączył: 23.08.2008

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


Jeśli zaczynasz z Symfony to dlaczego nie zacząłeś z najnowszą wersją?
Go to the top of the page
+Quote Post
zniviash
post 16.09.2011, 09:14:46
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.09.2011

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


muszę się przestawić z Zenda na Symfony do nowej pracy.

wiem tylko że sf2 jest szybsze, czy jeszcze ma jakieś znaczące zalety?
nie mówię tutaj o aktualności i czasie wspierania produktów bo to sprawy oczywiste.
Go to the top of the page
+Quote Post
bikerszymek
post 16.09.2011, 09:27:32
Post #6





Grupa: Zarejestrowani
Postów: 91
Pomógł: 13
Dołączył: 23.08.2008

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


nie mam czasu zeby sie na ten temat rozwodzic wiec: http://symfony.com/symfony-in-five-minutes

to Ci powinno rozjasnic sprawe
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: 19.05.2024 - 13:43