1

当我想保留对自身进行引用的实体时,我遇到了一个奇怪的问题。

D B:

PROJECT有 ColumnPARENT_ID包含对自身的引用。

模型:

/**
 * @OneToOne(targetEntity="Model_Name")
 * @JoinColumn(name="PARENT_ID", referencedColumnName="ID")
 **/

protected $_parentId;

代码:

$project->setParentId(int);

设置后PARENT_ID我持久化实体,除此之外的所有数据PARENT_ID都存储在数据库中。

编辑

ID 字段/列

/**
 * @Id
 * @Column(type="integer", name="ID")
 * @GeneratedValue(strategy="IDENTITY")
 */
protected $_id;

/**
 * @return int
 */
public function getParentId()
{
    return $this->_parentId;
}

/**
 * @param  int $parentProjectId
 * @return Application_Model_Data_Project $this
 */
public function setParentId($parentId)
{
    $this->_parentId = $parentId;

    return $this;
}
4

1 回答 1

1

您可以发布更多代码吗?那部分看起来还不错。

这是一个工作自引用实体的 SSCCE。也许这会有所帮助。

/**
 * @Entity @Table(name="messages")
 **/
class Model_Message
{
    /** 
     * @Id @Column(name="message_id",type="integer") @GeneratedValue 
     **/
    protected $id;

    /**
     *@ManyToOne(targetEntity="Model_Message")
     *@JoinColumn(name="parent_id", referencedColumnName="message_id")
     **/
    protected $parentMessage;

    /**
     * @OneToMany(targetEntity="Model_Message", mappedBy="parentMessage")
     **/
    protected $replies = array();

    [...]
}

编辑

如果你想用学说保存与另一个对象的关系,你必须保存对象,而不是 id。这意味着您必须设置 Model_Name 对象,而不是变量中标记为 Model_Name (targetEntity) 的 id(整数)。(Doctrine 将在数据库中自动使用 int)。

请参阅上面的 ManyToOne 示例。

/**
 * @OneToOne(targetEntity="Model_Name")
 * @JoinColumn(name="PARENT_ID", referencedColumnName="ID")
 **/
protected $_parent;


[...]

/**
 * @param  Model_Name $parentProject
 * @return Application_Model_Data_Project $this
 */
public function setParent($parent)
{
    $this->_parent = $parent;

    return $this;
}
于 2012-09-25T22:43:43.910 回答