Intereting Posts
jQuery AJAX Вызов PHP скрипта с возвратом JSON Как получить все привязки матчей подгрупп с preg_match_all ()? Лучший подход к расширению полей из валидатора Отобразить пользовательский макет в автозаполнении в Yii как отсортировать многомерный массив с помощью внутреннего ключа Получить идентификаторы заказа со статусом = «Завершить» в Magento Ошибка сеанса PHP: «Файл слишком большой» На локальном хосте два разных проекта используют один и тот же сеанс Установить переменную JavaScript из PHP Как предотвратить доступ к страницам администратора, зная URL-адрес страницы администратора? cakephp 3 Cron Job не работает в cpanel Форма Jquery не показывает сообщение отправки на веб-сервере, но показывает сообщение отправки на локальном хосте Глобальные функции Symfony2 Zend_Validate_Date просто не работает должным образом Две версии PHP на Mac OS Snow Leopard & Установка xdebug с использованием PECL

Symfony 2.0 Doctrine entity setter не работает

У меня есть база данных с таблицей Отсутствие с полями: id, date, duration, user_id, typ_id .. У меня также есть 2 таблицы User и AbsenceTyp. Все с * _id определяется как FK для соответствующей таблицы.

Я создал getters / seters и обновил свою БД следующими командами:

php app/console doctrine:generate:entities MyTestBundle php app/console doctrine:schema:update --force 

(Не генерировали ошибок …)

Теперь, сохранив отсутствие:

 $ab = new Absence(); $ab->setUserId(1); $ab->setDate($date); $ab->setDuration('0.5'); $ab->setTypId(2); $em->persist($ab); $em->flush(); 

… это приводит к этому sql-статуту:

 'INSERT INTO absence (date, duration, user_id, typ_id) VALUES (?, ?, ?, ?)' with params ["2014-07-07", "0.5", null, null]: 

Сети для всех FK не работают … Но Getters отлично справляются с ними (например, getTypId ()) Любые идеи? Здесь мое отсутствие-сущность:

 <?php namespace MyTest\Bundle\MainBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="AbsenceRepository") * @ORM\Table(name="absence", indexes={@ORM\Index(name="fk_absence_user", columns= {"user_id"}), @ORM\Index(name="fk_absence_absencetyp", columns={"typ_id"})}) */ class Absence { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="date", nullable=false) */ protected $date; /** * @ORM\Column(type="decimal", precision=5, scale=2, nullable=false) */ protected $duration; /** * @ORM\Column(type="integer", nullable=false) */ protected $user_id; /** * @ORM\ManyToOne(targetEntity="MyTest\Bundle\UserBundle\Entity\User", inversedBy="absences") * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ protected $user; /** * @ORM\Column(type="integer", nullable=false) */ protected $typ_id; /** * @ORM\ManyToOne(targetEntity="MyTest\Bundle\MainBundle\Entity\AbsenceTyp", inversedBy="absences") * @ORM\JoinColumn(name="typ_id", referencedColumnName="id") */ protected $absenceTyp; ... // generated Getter / Setters 

Related of "Symfony 2.0 Doctrine entity setter не работает"

Когда у вас есть отношение JOIN, вы должны использовать установщик объектов для установки значения объединенного столбца. Так, например, чтобы установить значение для поля user_id, вам нужно использовать set_ser ($ userObject) setter вместо setUserId ().

Фактически указание поля $ user_id в вашей организации не требуется. Иногда бывает полезно сделать это, если вам нужно получить доступ непосредственно к значению user_id во время SELECT из базы данных без необходимости извлечения пользовательского объекта.

Ваш код может выглядеть примерно так:

 $user = new User(); //fake user or real user object if you have it fetched from db already $user->setId(5); $ab = new Absence(); $ab->setUser($user); // ... set other fields $em->persist($ab); $em->flush();