简体   繁体   English

Symfony 2.0教义实体设置器不起作用

[英]Symfony 2.0 Doctrine entities setter doesn't work

I have a database with a table Absence with fields: id, date, duration, user_id, typ_id.. I also have 2 tables User and AbsenceTyp. 我有一个数据库,该数据库带有一个表Absence,该表具有以下字段:id,日期,持续时间,user_id,typ_id。.我还有2个表User和AbsenceTyp。 Everything with *_id is definied as a FK to the according table. 带有* _id的所有内容都被定义为相应表的FK。

I generated getters/setters and updated my DB with the following commands: 我生成了getter / setter,并使用以下命令更新了数据库:

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

(Didn't generate any errors ...) (没有产生任何错误...)

Now by saving an absence: 现在,通过节省缺勤时间:

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

$em->persist($ab);
$em->flush();

...it lead to this sql-statment: ...导致此sql语句:

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

Setters for all the FKs aren't working... But Getters do their thing perfectly (eg getTypId()) Any ideas? 所有FK的设置程序都无法正常工作...但是Getter可以完美地完成它们的工作(例如getTypId())有什么想法吗? Here my Absence-Entity: 这是我的缺席实体:

<?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

When you have a JOIN relationship you must use the object setter to set the value of joined column. 当您具有JOIN关系时,必须使用对象设置器设置连接列的值。 So for example, to set the value for user_id field you need to use ->setUser($userObject) setter instead of the setUserId(). 因此,例如,要设置user_id字段的值,您需要使用-> setUser($ userObject)setter而不是setUserId()。

Actually specifying the $user_id field in your entity is not required. 实际上不需要在您的实体中指定$ user_id字段。 It can be useful sometimes to do so, if you need to get access directly the user_id value during SELECTs from the database without having to fetch the User Object. 如果您需要在数据库中进行SELECT时直接获取user_id值,而不必获取User Object,则有时这样做很有用。

Your code could look something like this: 您的代码可能看起来像这样:

$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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM