php - persist Integrity constraint oneToOne -


entities :

entity miejsce

class miejsce {    /**  *  * @var lokalizacja $lokalizacja  * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja",cascade={"persist"})  * @orm\joincolumn(name="id", referencedcolumnname="miejsce_id")  */ protected $lokalizacja; 

entity lokalizacja

class lokalizacja {      /**      * lokalizacja.id = miejsce.id      * @orm\column(type="integer")      * @orm\id      */     protected $id;          /**  * @var miejsce  * @orm\onetoone(targetentity="miejsce\obiektybundle\entity\miejsce", inversedby="lokalizacja")  * @orm\joincolumn(name="miejsce_id", referencedcolumnname="id")  */ protected $miejsce;      /**      * @orm\column(type="integer")      */     protected $miejsce_id; 

i create new miejsce

$miejsce = new miejsce(); 

.... $em->persist($miejsce); $em->flush();

and

sqlstate[23000]: integrity constraint violation: 1452 cannot add or update child row: foreign key constraint fails (`symfony2_kpb_lazy`.`mmiejsce`, constraint `fk_41db4c8bf396750` foreign key (`id`) references `mlokalizacja` (`miejsce_id`))  

if first setup lokalizacja

 $lokalizacja = new lokalizacja();         $lokalizacja->setlat($a['lat']);         $lokalizacja->setlng($a['lng']);         $em->persist($lokalizacja);         $em->flush(); 

sqlstate[23000]: integrity constraint violation: 1048 column 'miejsce_id' cannot null

if add persist

 /**      *      * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja",cascade={"persist"})      * @orm\joincolumn(name="id", referencedcolumnname="miejsce_id")      */     protected $lokalizacja; 

an exception occurred while executing 'insert mlokalizacja (miejsce_id, lat, lng, zoom, textadres, mmiejscowosci_id, mpowiaty_id, mwojewodztwa_id, street) values (?, ?, ?, ?, ?, ?, ?, ?, ?)' params [null, 49.658192, 18.825332, null, null, null, null, null, null]:

sqlstate[23000]: integrity constraint violation: 1048 column 'miejsce_id' cannot null

when run code

    $miejsce = new miejsce();          $lokalizacja = new lokalizacja();         $lokalizacja->setlat($a['lat']);         $lokalizacja->setlng($a['lng']);         $lokalizacja->setmiejsce($miejsce);          $miejsce->setlokalizacja($lokalizacja);   $em->persist($miejsce);         $em->flush(); 

when try add miejsce in phpmyadmin -

1452 - cannot add or update child row: foreign key constraint fails (symfony2_kpb.mmiejsce, constraint fk_41db4c8bf396750 foreign key (id) references mlokalizacja (miejsce_id))

so how add miejsce ?

update1

class miejsce {      /**      * @var lokalizacja $lokalizacja      * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja")      */     protected $lokalizacja;    /**  * @orm\entity  *  * @orm\table(name="mlokalizacja", indexes={     @orm\index(name="index_latlng", columns={"lat","lng"}) }) *  */ class lokalizacja {      /**      * @var miejsce      * @orm\onetoone(targetentity="miejsce\obiektybundle\entity\miejsce", inversedby="lokalizacja")      * @orm\joincolumn(name="miejsce_id", referencedcolumnname="id")      */     protected $miejsce; 

i update database , see (this phpmyadmin table structure):

create table if not exists `mmiejsce` (   `id` int(11) not null auto_increment,   `nazwa` varchar(255) collate utf8_polish_ci not null,   `parent_id` int(11) default null,   `lokalizacja_id` int(11) default null,   primary key (`id`),  , lokalizacja  create table if not exists `mlokalizacja` (   `id` int(11) not null auto_increment,   `lat` double not null,   `lng` double not null,   `zoom` int(11) not null,   `miejsce_id` int(11) default null,   primary key (`id`),   unique key `uniq_4fc27791464204dc` (`miejsce_id`), 

why doctrine add lokalizacja_id mmiejsce ? , still save not possible

update2 add mappedby="miejsce", database ok when try save

class miejsce {     /**      * @var lokalizacja $lokalizacja      * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja" , mappedby="miejsce")      */     protected $lokalizacja; 

have error :

a new entity found through relationship 'miejsce\obiektybundle\entity\miejsce#lokalizacja' not configured cascade persist operations entity: miejsce\lokalizacjabundle\entity\lokalizacja@000000006200f93900007f919f6a5a6f. solve issue: either explicitly call entitymanager#persist() on unknown entity or configure cascade persist association in mapping example @manytoone(..,cascade={"persist"}). if cannot find out entity causes problem implement 'miejsce\lokalizacjabundle\entity\lokalizacja#__tostring()' clue.

so add ,cascade={"persist"}

 * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja" , mappedby="miejsce" ,cascade={"persist"}) 

now entity save succes :) cant delete - when try delete miejsce -

i found ondelete="cascade" - have error :

creation error] annotation @orm\onetoone declared on property miejsce\obiektybundle\entity\miejsce::$lokalizacja not have property named "ondelete". available properties: targetentity, mapped     by, inversedby, cascade, fetch, orphanremoval                                                                                                             

when add * @orm\onetoone(targetentity="miejsce\lokalizacjabundle\entity\lokalizacja" , mappedby="miejsce" ,cascade={"persist"})

so add cascade delete ?

update3

ok when add

 * @orm\joincolumn(name="miejsce_id", referencedcolumnname="id", ondelete="cascade") 

to lokalizacja everythink work.

you trying establish onetoone bidirectional relationship. such relationship (as bidirectional ones) needs mention inversedby on 1 side , mappedby on other, forgot in annotation.

for more detailed informations relationships, see doctrine documentation.

but regarding particular need, can start following.

miejsce:

class miejsce {     /**      * @onetoone(targetentity="lokalizacja", mappedby="miejsce", cascade={"remove"})      */     private $lokalizacja; 

here forgot mappedby.

lokalizacja:

class lokalizacja {     /**      * @onetoone(targetentity="miejsce", inversedby="lokalizacja")      */     private $miejsce; 

when join based on id, joincolumn optional , can omit (as did).

then, go on with:

// (...) $em->persist($miejsce); $em->flush(); 

Comments

Popular posts from this blog

php - regexp cyrillic filename not matches -

c# - OpenXML hanging while writing elements -

sql - Select Query has unexpected multiple records (MS Access) -