Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Doctrine] problem dodawaniem rekordów z kluczem obcym
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


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ć (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Sajrox 12.05.2009, 23:43:08
Go to the top of the page
+Quote Post
murwazy
post
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

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


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

Ten post edytował murwazy 13.05.2009, 08:46:24
Go to the top of the page
+Quote Post
cojack
post
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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'
            )
        );
Go to the top of the page
+Quote Post
Sajrox
post
Post #4





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Faktycznie, wystarczyło dodać 'primary' => true i działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzięki wielkie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 17:31