Отношения доктрины исчезают после упадка и сброса - PullRequest
1 голос
/ 06 февраля 2012

У меня есть отношение многие к одному между сущностью, которая записывает заметки, и сущностью, в которой пользователь делает комментарии.т. е. один пользователь может сделать много комментариев.

Комментарии отображаются нормально при первом просмотре страницы, $ note-> employee-> user получает имя пользователя из таблицы 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-> note, $ notes->тип display, но $ 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();

1 Ответ

0 голосов
/ 14 февраля 2012

Попробуйте удалить

/**
 * @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 возвращает ноль, если оно пустое

Я не вижу нигде, если вы установили LastModified?

$entity->lastmodified = new \DateTime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...