Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework][Doctrine], Nie działają relację jeden do wielu i wiele do jednego
Zick4
post 4.11.2008, 18:41:19
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 12.10.2007

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


Witajcie!
Utworzyłem sobie 2 tabelki w bazie danych postgresa. Jedna

artykuly (id, id_dzialu, tytul, tresc)

z czego id to klucz glówny, id_dzialu obcy do drugiej tabelki dzialy która wygląda tak:

dzialy(id, nazwa, tytul, tresc)

gdzie id to klucz główny. Doctrine wygenerował mi takie klasy:
  1. <?php
  2. abstract class BaseArtykuly extends Doctrine_Record
  3. {
  4.  public function setTableDefinition()
  5.  {
  6.    $this->setTableName('artykuly');
  7.    $this->hasColumn('id', 'integer', 4, array('type' => 'integer', 'length' => 4, 'primary' => true));
  8.    $this->hasColumn('id_dzialu', 'integer', 4, array('type' => 'integer', 'length' => 4, 'notnull' => true));
  9.    $this->hasColumn('tytul', 'string', null, array('type' => 'string'));
  10.    $this->hasColumn('tresc', 'string', null, array('type' => 'string'));
  11.  }
  12.  
  13. }
  14. ?>


  1. <?php
  2. abstract class BaseDzialy extends Doctrine_Record
  3. {
  4.  public function setTableDefinition()
  5.  {
  6.    $this->setTableName('dzialy');
  7.    $this->hasColumn('id', 'integer', 4, array('type' => 'integer', 'length' => 4, 'primary' => true, 'sequence' => 'content_id'));
  8.    $this->hasColumn('name', 'string', null, array('type' => 'string', 'notnull' => true));
  9.  }
  10.  
  11. }
  12. ?>

  1. <?php
  2. class Artykuly extends BaseArtykuly
  3.  {
  4.  
  5.  }
  6. ?>

  1. <?php
  2. class Dzialy extends BaseDzialy
  3. {
  4.  
  5. }
  6. ?>

Kierując się dokumentacją dopisałem funkcje setUp
  1. <?php
  2. class Artykuly extends BaseArtykuly
  3. {
  4.    public function setUp()
  5.    {
  6.        
  7.        $this->hasOne('Dzialy',array(
  8.            'local' => 'dzial_id',
  9.            'foreign'=>'id'
  10.        ));
  11.    }
  12. }
  13. ?>

  1. <?php
  2. class Dzialy extends BaseDzialy
  3. {
  4.    function setUp()
  5.    {
  6.        
  7.        $this->hasMany('Artykuly',array(
  8.            'local' => 'id',
  9.            'foreign'=>'dzial_id'
  10.        ));
  11.    }
  12. }
  13. ?>

Teraz w kontrolerze chciałem sprawdzić czy wszystko działa i napisałem
  1. <?php
  2. class DzialController extends Zend_Controller_Action
  3. {
  4.    
  5.    function indexAction()
  6.    {
  7.      
  8.        Doctrine_Manager::connection($this->config_db->pdo);
  9.        $dzial = new Artykuly();
  10.        print_r($dzial->Dzialy);
  11.        exit;
  12.        
  13.        
  14.        
  15.    }
  16.  
  17. }
  18. ?>

I niestety zwraca mi taki błąd

Fatal error: Uncaught exception 'Doctrine_Record_Exception' with message 'Unknown record property / related component "dzial_id" on "Artykuly"' in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Record\Filter\Standard.php:55 Stack trace: #0 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Record.php(987): Doctrine_Record_Filter_Standard->filterGet(Object(Artykuly), 'dzial_id', Object(Doctrine_Null)) #1 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Record.php(948): Doctrine_Record->_get('dzial_id', true) #2 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Relation\LocalKey.php(48): Doctrine_Record->get('dzial_id') #3 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Record.php(977): Doctrine_Relation_LocalKey->fetchRelatedFor(Object(Artykuly)) #4 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\ in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\sluga\library\Doctrine\Record\Filter\Standard.php on line 55


Jakieś pomysły?
Go to the top of the page
+Quote Post
michalg
post 4.11.2008, 19:59:02
Post #2





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

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


Nie wiem, jak jest w zendzie, używam doctrine w symfony.

Podejrzewam, że problem może być taki, że metody setup powinny być w klasach Base. Spróbuj je tam przenieść.

A na przyszłość, jeśli będziesz musiał przegenerować klasy z modelem, to chyba najlepiej Ci będzie poprawić plik schema.yml (o ile taki jest w zendzie), bo obawiam się, że doctrine nie potrafi odczytać wiązań z bazy danych i zamienić je na relacje w modelu (teraz sprawdzałem i mu się nie udało).
Go to the top of the page
+Quote Post
wolditm
post 4.11.2008, 20:37:40
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 20.07.2005

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


  1. <?php
  2. $this->hasColumn('id_dzialu', 'integer', 4, array('type' => 'integer', 'length' => 4, 'notnull' => true));
  3. ?>

  1. <?php
  2. $this->hasOne('Dzialy',array(
  3.           'local' => 'dzial_id',
  4.           'foreign'=>'id'
  5.       ));
  6. ?>



błędna nazwa kolumny.


--------------------
Wspomnienia
Go to the top of the page
+Quote Post
Zick4
post 4.11.2008, 22:57:26
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 12.10.2007

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


Wielki dzięki biggrin.gif . Tyle godzin spędzonych nad dokumentacja, a tu taka pierdółka blinksmiley.gif
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: 12.06.2025 - 23:17