Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Doctrine] problem dodawaniem rekordów z kluczem obcym
Sajrox
post 13.05.2009, 00:05:16
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ć 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

Ten post edytował Sajrox 12.05.2009, 23:43:08
Go to the top of the page
+Quote Post
murwazy
post 13.05.2009, 08:45:34
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 19.05.2009, 18:10:13
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'
            )
        );


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
Sajrox
post 4.06.2009, 10:40:05
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 smile.gif

Dzięki wielkie.
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: 25.04.2024 - 11:00