symfony2: невозможно сохранить сущность и вставить в базу данных

Я новичок в Symfony2, поэтому, пожалуйста, помогите мне решить эту проблему. У субъекта отчета и субъекта организации.

Отображение отчета выглядит так:

 <entity name="Acme\ReportsBundle\Entity\Report" table="reports_report">
<lifecycle-callbacks>
<lifecycle-callback type="prePersist" method="setCreatedAt"/>
<lifecycle-callback type="prePersist" method="setUpdatedAt"/>
</lifecycle-callbacks>
<many-to-one field="organization" target-entity="Acme\OrganizationBundle\Entity\Organization" inversed-by="reports">
<join-column name="organization_id" referenced-column-name="id" />
</many-to-one>
<many-to-one field="year" target-entity="Acme\ReportsBundle\Entity\Year" inversed-by="reports">
<join-column name="year_id" referenced-column-name="id" />
</many-to-one>
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="organization_id" type="integer" lenght="11" nullable="false" />
<field name="year_id" type="integer" lenght="11" nullable="false" />
<field name="status" type="smallint" nullable="true" />
<field name="user_created" type="integer" lenght="11" nullable="false" />
<field name="user_updated" type="integer" lenght="11" nullable="false" />
<field name="created_at" type="datetime" nullable="false" />
<field name="updated_at" type="datetime" nullable="false" />
</entity>

и организационная часть:

 /**
* @ORM\OneToMany(targetEntity="Acme\ReportsBundle\Entity\Report", mappedBy="organizations")
*
*/
protected $reports;

/**
* Constructor
*/
public function __construct()
{
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
$this->reports = new \Doctrine\Common\Collections\ArrayCollection();
}

Я пытаюсь установить свойства отчета с помощью конструктора:
Acme \ ReportsBundle \ Entity \ Report

public function __construct(\Acme\OrganizationBundle\Entity\Organization $organization, \Acme\ReportsBundle\Entity\Year $year, \Application\Sonata\UserBundle\Entity\User $user)
{
$this->organization_id = $organization->getId();

$this->year_id = $year->getId();

$this->user_created = $user->getId();

$this->user_updated = $user->getId();

}

И, наконец, контроллер
Acme / ReportsBundle / Controller / контроллера по умолчанию:

public function indexCreate()
{
$organization = $this->getDoctrine()
->getRepository('AcmeOrganizationBundle:Organization')
->find(2);

$year = $this->getDoctrine()
->getRepository('AcmeReportsBundle:Year')
->find(888);

$user = $this->getDoctrine()
->getRepository('ApplicationSonataUserBundle:User')
->find(20);

$report = new Report($organization, $year, $user);

// var_dump shows that all properties were set

$em = $this->getDoctrine()->getManager();

$em->persist($report);

$em->flush();

}

Итак, посещая этот маршрут, я получаю:

An exception occurred while executing 'INSERT INTO reports_report (organization_id, year_id, status, user_created, user_updated, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, 20, 20, "2014-09-21 15:07:41", "2014-09-21 15:07:41"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'organization_id' cannot be null

Итак, что не так со свойствами, которые были установлены с помощью конструктора? Почему user_id был сохранен, а organization_id и year_id нет?

0

Решение

Я решил это сам. Решение состояло не в том, чтобы установить Report organization_id или year_id вручную, а только в ссылках на свойства ($ organization, $ year) в конструкторе.
Конструктор Acme / ReportBundle / Entity / Report.php должен выглядеть следующим образом:

public function __construct(\Acme\OrganizationBundle\Entity\Organization $organization, \Acme\ReportsBundle\Entity\Year $year, \Application\Sonata\UserBundle\Entity\User $user)
{

$this-organization = $organization;
$this->year = $year;
$this->user_created = $user->getId();
$this->user_updated = $user->getId();
$this->status = 2;}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]