[英]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.