Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Doctrine] Relacje
Forum PHP.pl > Forum > PHP > Object-oriented programming
Vimax
Witam otóż próbuje zrobić relacje, chodzi o to, żeby w encji

  1. <?php
  2. /**
  3. * @Entity
  4. * @Table(name="player_deaths")
  5. */
  6. class Entity_PlayerDeath
  7. {
  8. /**
  9. * @Id
  10. * @Column(type="integer")
  11. * @GeneratedValue(strategy="AUTO")
  12. */
  13. private $id;
  14. /** @Column(type="integer") */
  15. private $player_id;
  16. /** @Column(type="bigint") */
  17. private $date;
  18. /** @Column(type="integer") */
  19. private $level;
  20.  
  21. public function setId($id) {
  22. $this->id = $id;
  23. return $this;
  24. }
  25.  
  26. public function getId() {
  27. return $this->id;
  28. }
  29.  
  30. public function setPlayerId($player_id) {
  31. $this->player_id = $player_id;
  32. return $this;
  33. }
  34.  
  35. public function getPlayerId() {
  36. return $this->player_id;
  37. }
  38.  
  39. public function setDate($date) {
  40. $this->date = $date;
  41. return $this;
  42. }
  43.  
  44. public function getDate() {
  45. return $this->date;
  46. }
  47.  
  48. public function setLevel($level) {
  49. $this->level = $level;
  50. return $this;
  51. }
  52.  
  53. public function getLevel() {
  54. return $this->level;
  55. }
  56. }


pojawilo się name z

  1. <?php
  2. /**
  3. * @Entity
  4. * @Table(name="players")
  5. */
  6. class Entity_Player
  7. {
  8. /**
  9. * @Id
  10. * @Column(type="integer")
  11. * @GeneratedValue(strategy="AUTO")
  12. */
  13. private $id;
  14. /** @Column(type="string") */
  15. private $name;


Próbowałem w taki sposób:
  1. /*
  2.   * @OneToOne(targetEntity="Entity_Player")
  3.   * @JoinColumn(name="player_id", referencedColumnName="id")
  4.   */
  5. private $player;


ale i tak zwracało $player zwracało null.

Jak to ma wyglądać?
Necsord
Wyglada poprawnie na pierwszy rzut oka. Sprawdziłeś dokładnie czy od strony bazy nie ma problemów?

  1. /*
  2.  * @OneToOne(targetEntity="Entity_Player")
  3.  * @JoinColumn(name="player_id", referencedColumnName="id")
  4.  */
  5. private $player;

Dokładnie tak próbowałeś ? Początek PHPDoc'a jest niepoprawny, powinno byc "/**".
Vimax
Fakt, literówka, musze sobie wbić do głowy, że /** a nie /* w końcu ;p

Ale i tak jest problem, gdy tak zrobiłem to pluje blędami typu:
require(C:\wamp\www\axam/application/models/Proxies\__CG__Entity_Player.php

Wszystkie modele encji znajdują sie w application/models/entity i czemu __CG__ ?

Nie wiem czemu w ogóle Proxy, ale może coś tutaj źle:
  1. $config->setProxyDir(APPLICATION_PATH . '/models/Proxies');
  2. $config->setAutoGenerateProxyClasses(true);
  3. $config->setProxyNamespace('App\Proxies');
Necsord
Niedawno dopiero zacząłem z doctrine, ale te klasy są generowane automatycznie, aby dodac funkcjonalności twoim powiązanym klasom. Tak czy inaczej sprawdź czy plik sie generuje / czy folder istnieje / czy doctrine ma możliwosc generowania tych klas.
Vimax
Okej, dzięki, działa. Zapomniałem stworzyć folder wink.gif

Jeszcze żeby nie tworzyć nowego folderu, jak zrobić aby pobierało jedno pole a nie wszystkie z tabeli?

Próbowałem

  1.  
  2. /**
  3.   * @OneToOne(targetEntity="Entity_Player")
  4.   * @JoinColumn(name="player_id", referencedColumnName="id", fieldName="name")
  5.   */


Ale nie działa i dalej zwraca cały obiekt. Da sie w ogóle coś takiego w doctrine?
Crozin
Takie coś określa się już na poziomie DQL-a, nie konfiguracji Doctrine.
  1. SELECT o1, o2.{field_a, field_b} FROM Object1 o1 JOIN Object2 o2
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.