Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Doctrine] problem dodawaniem rekordów z kluczem obcym
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty obsługi baz danych
Sajrox
Witam,

Niestety do dzisiaj praca z Doctrine przebiegała naprawdę sprawnie i przyjemnie aż do momentu gdy chciałem dodać rekord.

Próbuję dodać rekord do tabeli uzytkownicy a nastepnie numer telefonu do tabeli uzytkownicy_telefony i tutaj mam problem.
Przedstawię krótki kod żeby nie zanudzać winksmiley.jpg

Bląd który otrzymuje
  1. Couldn't get last insert identifier.


Według manuala oraz róznych poradników powinno działać a jednak sad.gif
oto kod:
  1. <?php
  2. $u = new Uzytkownicy();    
  3.            $u->imie = $imie;
  4.            $u->nazwisko = $nazwisko;
  5.            $u->save();
  6.  
  7.  
  8.            $ut = new UzytkownicyTelefony();    
  9.            $ut->telefon = $telefon;
  10.            $ut->uzytkownicy_id = $u['id'];            
  11.            $ut->save();
  12. ?>


Podobnie jest z:
  1. <?php
  2. $u = new Uzytkownicy();    
  3.            $u->imie = $imie;
  4.            $u->nazwisko = $nazwisko;
  5.            
  6.            $u->UzytkownicyTelefony[0]->telefon = $telefon;
  7.            
  8.            $u->save();
  9. ?>



Klasa Uzytkownicy
  1. <?php
  2. abstract class BaseUzytkownicy extends Doctrine_Record
  3. {
  4.    public function setTableDefinition()
  5.    {
  6.        $this->setTableName('uzytkownicy');
  7.        $this->hasColumn('id', 'integer', 4, array('type' => 'integer', 'length' => 4, 'unsigned' => 1, 'primary' => true, 'autoincrement' => true));
  8.        $this->hasColumn('imie', 'string', 20, array('type' => 'string', 'length' => 20, 'notnull' => true));
  9.        $this->hasColumn('nazwisko', 'string', 40, array('type' => 'string', 'length' => 40, 'notnull' => true));
  10.    }
  11.  
  12.    public function setUp()
  13.    {
  14.        $this->hasMany('UzytkownicyTelefony', array('local' => 'id',
  15.                                                    'foreign' => 'uzytkownicy_id'));
  16.    }
  17. }
  18. ?>



Klasa UzytkownicyTelefony
  1. <?php
  2. abstract class BaseUzytkownicyTelefony extends Doctrine_Record
  3. {
  4.    public function setTableDefinition()
  5.    {
  6.        $this->setTableName('uzytkownicy_telefony');
  7.        $this->hasColumn('telefon', 'string', 40, array('type' => 'string', 'length' => 40, 'notnull' => true));
  8.        $this->hasColumn('uzytkownicy_id', 'integer', 4, array('type' => 'integer', 'length' => 4, 'unsigned' => 1));
  9.    }
  10.  
  11.    public function setUp()
  12.    {
  13.        $this->hasOne('Uzytkownicy', array('local' => 'uzytkownicy_id',
  14.                                           'foreign' => 'id'));
  15.    }
  16. }
  17. ?>


Kod troche obszerny ale to łatwy przykład smile.gif czy ktoś może mi pomoc ? Będę bardzo wdzięczny.

============= EDIT =============

Problem rozwiązany. Okazało się że aby operacja zakończyłą się sukcesem tabela uzytkownicy_telefony musi posiadac pole id (PRIMARY KEY) zwykle do tego typu tabel nie daje klucza bo nie bylo takiej potrzeby jednak widze ze Doctrine tego wymaga. smile.gif
murwazy
to Ty sam tworzysz tabele? polecam pisac modele i zwalac proces tworzenia na Doctrine
  1. <?php
  2. $cl[] = 'Uzytkownicy';
  3. $cl[] = 'UzytkownicyTelefony';
  4. Doctrine::createTablesFromArray($cl);
  5. ?>


warto pozniej przejrzec tabele, kontrolowac tworzenie kluczy obcych itp
cojack
nie zapomnij że doctrine automatycznie przybiera wartość pola id jako id, jeżeli utworzysz inne pole id z pkey, to musisz o tym powiedzieć doctrine:
np
Kod
        $this->hasColumn('user_id', 'string', 32, array(
                'type' => 'string',
                'fixed' => 1,
                'primary' => true,
                'length' => '32'
            )
        );
Sajrox
Faktycznie, wystarczyło dodać 'primary' => true i działa smile.gif

Dzięki wielkie.
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-2024 Invision Power Services, Inc.