Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][Doctrine]
Forum PHP.pl > Forum > PHP > Frameworki
Zick4
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?
michalg
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).
wolditm
  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.
Zick4
Wielki dzięki biggrin.gif . Tyle godzin spędzonych nad dokumentacja, a tu taka pierdółka blinksmiley.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.