Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter][Dosctrine 2 ] Join
Forum PHP.pl > Forum > PHP > Frameworki
angel170
Witam mam pytanie jak zrobić zapytanie Join w doctrine 2 Mam taka baze
  1. CREATE TABLE Product (
  2. id INT AUTO_INCREMENT NOT NULL,
  3. shipping_id INT DEFAULT NULL,
  4. PRIMARY KEY(id)
  5. ) ENGINE = InnoDB;
  6. CREATE TABLE Shipping (
  7. id INT AUTO_INCREMENT NOT NULL,
  8. PRIMARY KEY(id)
  9. ) ENGINE = InnoDB;
  10. ALTER TABLE Product ADD FOREIGN KEY (shipping_id) REFERENCES Shipping(id);


Chciałbym wykonać takie zaspytanie:
  1. SELECT * FROM shipping JOIN product ON product.shipping_id = shipping.id


Stowrzylem takie klasy:

Model Product.php
  1. <?php
  2. namespace models;
  3.  
  4. /**
  5.  * @Entity
  6.  * @Table(name="product")
  7.  */
  8. class Product{
  9.  
  10. /**
  11. * @Id
  12. * @Column(name = "`id`", type="integer", nullable=false, unique=true )
  13. * @GeneratedValue(strategy="AUTO")
  14. */
  15. private $id;
  16.  
  17. /**
  18.   * @Column(name = "`shipping_id`")
  19.   * @OneToOne(targetEntity="Shipping")
  20.   * @JoinColumn(name="shipping_id", referencedColumnName="id")
  21.   **/
  22. private $shipping;
  23. }


model Shipping.php
  1. <?php
  2.  
  3. namespace models;
  4.  
  5. /**
  6.  * @Entity
  7.  * @Table(name="shipping")
  8.  */
  9. class Shipping {
  10.  
  11.  
  12. /**
  13.   * @Id
  14.   * @Column(name="id", type="integer", nullable=false)
  15.   * @GeneratedValue(strategy="AUTO")
  16.   */
  17. private $id;
  18. }


kontroler
  1. $em = $this->doctrine->em;
  2. $query = $em->createQueryBuilder()
  3. ->select('u')
  4. ->from('models\Shipping', 'u')
  5. //->leftJoin('u.id', 'a')
  6. ->getQuery();
  7. $results = $query->getResult();



Dostaja bląd który nic mi nie mówi
  1. Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Semantical Error] line 0, col 52 near 'a': Error: Class models\Shipping has no association named Product' in C:\wamp\www\ideaWeb_CMS_doctrine\app\libraries\Doctrine\ORM\Query\QueryException.php on line 47


Jak powinno to wygladać w prawidłowy sposób ?
Crozin
Przecież obiekt Shipping nie ma żadnej relacji do obiektów Product (co innego w drugą stronę). Powinieneś utworzyć relację dwukierunkową - w dokumentacji szukaj przykładu dla bidirectional one-to-many relationship.
angel170
Dobra to powinno zadzialac cos takiego
  1. $query = $em->createQueryBuilder()
  2. ->select('u')
  3. ->from('models\Product', 'u')
  4. ->leftJoin('u.shipping', 'a')
  5. ->getQuery();
  6. $results = $query->getResult();


otrzymuje ten sam komunikat praktycznie
  1. Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' WITH message '[Semantical Error] line 0, col 55 near 'a': Error: Class models\Product has no association named shipping_id' IN C:\wamp\www\ideaWeb_CMS_doctrine\app\libraries\Doctrine\ORM\Query\QueryException.php ON line 47


Jak wiesz o co chodzi to mozesz poprawic ten kod bo ja nie ogarniam tego a na przykladzie sie naucze tego. A ten maual jest ... mogli dac przyklady jak zrobić zapytnaie jak opisali jak robi sie referencjie
destroyerr
Przecież Crozin napisał Ci, że błąd masz w definiowaniu relacji. Manual zawsze mógłby być lepszy, ale moim zdaniem tworzenie relacji jest opisane wystarczająco dobrze żeby to ogarnąć.
angel170
To jest pierwszy przyklad z manulala mam rozumiec ze tam jest blad questionmark.gif Zakładając ze jednak nie i relacjie sa prawidlowo zrobione jakie zapytanie moge wykonac ?

Powiedzmy ze zaczynam to powoli kumać wczoraj przerobiłem przykład 6.6. One-To-Many, Bidirectional z manuala
  1. $query = $em->createQueryBuilder()
  2. ->select('u.id,a.id as id_2 ')
  3. ->from('models\Product', 'u')
  4. ->Join('u.features', 'a')
  5. ->getQuery();
  6. $results = $query->getResult();


Chciałem wykonać zapytanie
  1. $feature = $em->find("models\Feature", 3);


id dostałem odpowiedź
  1. A PHP Error was encountered
  2.  
  3. Severity: Warning
  4.  
  5. Message: file_put_contents(app//models/proxies\__CG__modelsProduct.php) [function.file-put-contents]: failed to open stream: No such file or directory
  6.  
  7. Filename: Proxy/ProxyFactory.php
  8.  
  9. Line Number: 187
  10. A PHP Error was encountered
  11.  
  12. Severity: Warning
  13.  
  14. Message: require(app//models/proxies\__CG__modelsProduct.php) [function.require]: failed to open stream: No such file or directory
  15.  
  16. Filename: Proxy/ProxyFactory.php
  17.  
  18. Line Number: 93
  19.  
  20. ( ! ) Fatal error: require() [function.require]: Failed opening required 'app//models/proxies\__CG__modelsProduct.php' (include_path='.;C:\php\pear') in C:\wamp\www\ideaWeb_CMS_doctrine\app\libraries\Doctrine\ORM\Proxy\ProxyFactory.php on line 93
Crozin
Wygląda na to, że nie wygenerowałeś klas-proxy dla swoich encji.
angel170
Głupi ja tongue.gif faktycznie zle folder nazwałem dzięki idę walczyć dalej z tymi zapytaniami tongue.gif
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.