【发布时间】:2014-07-26 15:35:29
【问题描述】:
我有一个带有字段的表 Absence 的数据库:id、日期、持续时间、user_id、typ_id.. 我还有 2 个表 User 和 AbsenceTyp。带有 *_id 的所有内容都被定义为相应表的 FK。
我生成了 getter/setter 并使用以下命令更新了我的数据库:
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 的 Setter 都不起作用...但是 Getter 完美地完成了他们的工作(例如 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
【问题讨论】:
-
我还尝试通过以下方式更改命名策略:naming_strategy:doctrine.orm.naming_strategy.underscore
-
您可能应该首先了解教义中的关联。您不需要 user_id 和 user 属性。与类型相同
标签: php symfony orm doctrine-orm setter