[英]Doctrine relationship disappears after persist and flush
我在記錄筆記的實體與讓用戶發表評論的實體之間存在多對一的關系。 即一個用戶可以發表很多評論。
第一次查看頁面時,注釋顯示良好,$ note-> employee-> user基於與notes表的多對一關系從employee表中獲取用戶名。 通過發布表單添加新筆記時:
$activity = new \S2\Entity\Crmnotes;
$activity->solicitorid = $solicitorid;
$activity->note = $activityDescription;
$activity->employeeid = 2;
$activity->type = $activityType;
$this->_em->persist($activity);
$this->_em->flush();
然后,該頁面將顯示來自notes實體的數據,而不是來自其任何關系的數據,即$ notes-> note,$ notes-> type顯示但$ notes-> employee-> user會導致嘗試獲取非以下屬性的數據:對象錯誤。
下次訪問該頁面時,所有數據將像往常一樣正常顯示。
編輯
另外,插入記錄后,日期時間對象$ note-> lastmodified也無法顯示。 當我嘗試格式化日期時,在非對象上收到調用成員函數format()的錯誤,例如$ note-> lastmodified-> format('d / m / YH:i');
編輯是,這是原則2。根據要求:
namespace S2\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Crmnotes
*
* @Table(name="crmnotes")
* @Entity
*/
class Crmnotes extends \S2_Doctrine_Entity
{
/**
*
* @ORM\ManyToOne(targetEntity="S2\Entity\Tblsolicitor", inversedBy="crmnotes")
* @JoinColumn(name="SolicitorID", referencedColumnName="SolicitorID")
*
*/
private $solicitor;
/**
*
* @ORM\ManyToOne(cascade={"persist"}, targetEntity="S2\Entity\Tblemployees", inversedBy="crmnotes")
* @JoinColumn(name="EmployeeID", referencedColumnName="EmployeeID")
*
*/
private $employee;
/**
* @var integer $notesid
*
* @Column(name="notesid", type="integer", nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
private $notesid;
/**
* @var integer $type
*
* @Column(name="type", type="integer", nullable=false)
*/
private $type;
/**
* @var integer $solicitorid
*
* @Column(name="SolicitorID", type="integer", nullable=false)
*/
private $solicitorid;
/**
* @var text $note
*
* @Column(name="Note", type="text", nullable=false)
*/
private $note;
/**
* @var integer $employeeid
*
* @Column(name="EmployeeID", type="integer", nullable=false)
*/
private $employeeid;
/**
* @var datetime $lastmodified
*
* @Column(name="LastModified", type="datetime", nullable=false)
*/
private $lastmodified;
public function __get($name)
{
if (isset($this->$name)){
return $this->$name;
} else {
return '';
}
}
public function __set($name, $value)
{
$this->$name = $value;
}
}
編輯
使用對象而不是嘗試手動插入外鍵時仍然沒有樂趣:
$activity = new \S2\Entity\Crmnotes;
$activity->note = $activityDescription;
$activity->type = $activityType;
$solicitor = $this->_em->getRepository('\S2\Entity\Tblsolicitor')->find($solicitorid);
$solicitor->crmnotes->add($activity);
$activity->solicitor = $solicitor;
$employee = $this->_em->getRepository('\S2\Entity\Tblemployees')->find(2);
$this->view->debug = $solicitor->crmnotes[0]->note;
$employee->crmnotes->add($activity);
$activity->employee = $employee;
$this->_em->persist($activity);
$this->_em->flush();
嘗試刪除
/**
* @var integer $employeeid
*
* @Column(name="EmployeeID", type="integer", nullable=false)
*/
private $employeeid;
正如更新的Doctrine在使用同一列也存在關系時所抱怨的那樣。
* @JoinColumn(name="EmployeeID", referencedColumnName="EmployeeID")
也許引用ID而不是EmployeeID?
if (isset($this->$name)){
return $this->$name;
} else {
return '';
}
不需要檢查它,如果它為空,Doctrine返回null
我沒有看到您設置LastModified的任何地方?
$entity->lastmodified = new \DateTime();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.