Entities:сохраняются Integrity ограничение OneToOne
Entity Place
class Miejsce
{
/**
*
* @var Lokalizacja $lokalizacja
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja",cascade={"persist"})
* @ORM\JoinColumn(name="id", referencedColumnName="miejsce_id")
*/
protected $lokalizacja;
Entity Место жительства
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;
Место и создать новый
$miejsce = new Miejsce();
.... $ em- > Упорство ($ положения); $ em-> флеш();
и получить
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`symfony2_KPB_lazy`.`mMiejsce`, CONSTRAINT `FK_41DB4C8BF396750` FOREIGN KEY (`id`) REFERENCES `mLokalizacja` (`miejsce_id`))
если и первое место установки
$lokalizacja = new Lokalizacja();
$lokalizacja->setLat($a['lat']);
$lokalizacja->setLng($a['lng']);
$em->persist($lokalizacja);
$em->flush();
SQLSTATE [23000]: Integrity нарушение ограничения: 1048 Колонка 'miejsce_id' не может быть пустым
если и добавить сохраняются
/**
*
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja",cascade={"persist"})
* @ORM\JoinColumn(name="id", referencedColumnName="miejsce_id")
*/
protected $lokalizacja;
Исключение при выполнении «INSERT INTO mLokalizacja (miejsce_id, лат, LNG, масштабирование textAdres, mMiejscowosci_id, mPowiaty_id, mWojewodztwa_id, улица) VALUES (?,?,?,?,?,?,?,?,?) 'с Params [Null, 49.658192, 18.825332, NULL, NULL, NULL, NULL, NULL, NULL]:
SQLSTATE [23000]: Integrity нарушение ограничения: 1048 Колонка' miejsce_id «не может быть пустым
при запуске код
$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();
, когда я пытаюсь добавить место в PhpMyAdmin - и получить
1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается (symfony2_KPB
. mMiejsce
, FK_41DB4C8BF396750
CONSTRAINT FOREIGN KEY (id
) Лит mLokalizacja
(miejsce_id
))
Так как добавить место?
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;
и обновление базы данных и увидеть (это структура PHPMyAdmin таблица):
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`),
and 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`),
Почему добавить lokalizacja_id учение mMiejsce? И еще спасти не представляется возможным
UPDATE2 я добавить mappedBy = «Miejsce», база данных выглядит хорошо сейчас, но когда я пытаюсь сохранить
class Miejsce
{
/**
* @var Lokalizacja $lokalizacja
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja" , mappedBy="miejsce")
*/
protected $lokalizacja;
есть ошибка:
Новый объект был найден через отношение «Miejsce \ ObiektyBundle \ Entity \ Miejsce # lokalizacja», которое не было настроено на каскадное сохранение операций для объекта: Miejsce \ LokalizacjaBundle \ Entity \ Lokalizacja @ 000000006200f93900007f919f6a5a6f. Чтобы решить эту проблему: либо явно вызовите EntityManager # persist() на этом неизвестном объекте, либо сконфигурируйте каскад, сохраняйте эту ассоциацию в сопоставлении, например, @ManyToOne (.., cascade = {"persist"}). Если вы не можете выяснить, какой объект вызывает проблему, выполните «Miejsce \ LokalizacjaBundle \ Entity \ Lokalizacja #__ toString()», чтобы получить ключ.
так я добавить, каскад = { "упорствовать"}
* @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja" , mappedBy="miejsce" ,cascade={"persist"})
Теперь объект сохранить SucceS но :) я не могу удалить его - при попытке удалить Miejsce -
я нашел OnDelete =» кАСКАД»- но есть ошибка:
Creation Error] The annotation @ORM\OneToOne declared on property Miejsce\ObiektyBundle\Entity\Miejsce::$lokalizacja does not have a property named "onDelete". Available properties: targetEntity, mapped
By, inversedBy, cascade, fetch, orphanRemoval
когда добавить в * @ORM \ OneToOne (targetEntity = "Miejsce \ LokalizacjaBundle \ Entity \ Lokalizacja", mappedBy = "Miejsce", каскад = { "упорствовать"})
Итак, где добавить каскад delete?
Update3
нормально, когда я добавить
* @ORM\JoinColumn(name="miejsce_id", referencedColumnName="id", onDelete="CASCADE")
в Lokalizacja Everythink работу.
Да спасительной работы, но Канот удалить - как настроить - если я удалить Miejsce я хочу удалить Lokalizacja –
@GrekHmhmm см редактировать – Jivan