Ситуация (см. код ниже):
Есть сущность Posout (оборудование), есть сущности Postype (тип оборудования) и Brand(бренд).
Сущность Posout (оборудование) имеет ОДНОСТОРОННИЕ ManyToOne связи с Postype (тип оборудования) и Brand(бренд), соответственно через поля:
/**
* @var integer
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\Postype", inversedBy="postype_id")
* @ORM\JoinColumn(name="postype_id", referencedColumnName="id")
*/
private $postype;
и
/**
* @var integer
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\Brand", inversedBy="posbrand_id")
* @ORM\JoinColumn(name="posbrand_id", referencedColumnName="id")
*/
private $posbrand;
Двусторонняя связь не нужна, т.к. Postype и Brand - это уже готовые перечни значений в соответствующих таблицах БД, которые не будут редактироваться, дополняться или удаляться, будут просто тупо использоваться.
Форма для создания нового оборудования (пока рассматриваю отдельно форму для создания и отдельно форму для редактирования оборудования) работает отлично через конструкции, типа:
...
->add( 'postype', new PostypeType() )
->add( 'posbrand', new BrandType() )
...
- выводятся раскрывающиеся списки типов и брендов каждый в своем поле.
Но у меня задача сделать форму редактирования оборудования (изменение типа и бренда), где в этих самых раскрывающихся списках текущие значения должны быть выделены как selected. В связи с такой постановкой задачи у меня возник общий вопрос:
как обращаться из класса формы (возможно, embedded) к связанным между собой сущностям?
Если опять что-то не понятно в описании, пишите - расшифрую.
Сущность Posout (часть кода ненужными для понимания полями и с геттерами и сеттерами опущена):
<?php
namespace Acme\AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Posout
* @ORM\Table(name="posout")
* @ORM\Entity(repositoryClass="Acme\AppBundle\Repository\PosoutRepository")
*/
class Posout {
/**
* @var integer
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
/**
* @var integer
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\Postype", inversedBy="postype_id")
* @ORM\JoinColumn(name="postype_id", referencedColumnName="id")
*/
private $postype;
/**
* @var integer
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\Brand", inversedBy="posbrand_id")
* @ORM\JoinColumn(name="posbrand_id", referencedColumnName="id")
*/
private $posbrand;
...
/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set postype
* @param integer $postype
* @return Posout
*/
public function setPostype( $postype )
{
$this->postype = $postype;
return $this;
}
/**
* Get postype
* @return integer
*/
public function getPostype()
{
return $this->postype;
}
/**
* Set posbrand
* @param integer $posbrand
* @return Posout
*/
public function setPosbrand( $posbrand )
{
$this->posbrand = $posbrand;
return $this;
}
/**
* Get posbrand_id
* @return integer
*/
public function getPosbrand()
{
return $this->posbrand;
}
...
}
Сущность Postype (часть кода ненужными для понимания полями и с геттерами и сеттерами опущена):
<?php
namespace Acme\AppBundle\Entity;use Doctrine\ORM\Mapping as ORM;
/**
* Postype
* @ORM\Table(name="postype")
* @ORM\Entity
*/
class Postype {
/**
* @var integer
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer
* @ORM\Column(name="postype_id", type="integer")
*/
private $postype_id;
/**
* @var string
* @ORM\Column(name="postype_desc", type="string")
*/
private $postype_desc;
/**
* @var string
* @ORM\Column(name="postype_name", type="string")
*/
private $postype_name;
/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set postype_id
* @param integer $postypeId
* @return Postype
*/
public function setPostypeId($postypeId)
{
$this->postype_id = $postypeId;
return $this;
}
/**
* Get postype_id
* @return integer
*/
public function getPostypeId()
{
return $this->postype_id;
}
...
}
И сущность Brand (часть кода ненужными для понимания полями и с геттерами и сеттерами опущена):
<?phpnamespace Acme\AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Brand
* @ORM\Table(name="brand")
* @ORM\Entity
*/
class Brand {
/**
* @var integer
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer
* @ORM\Column(name="posbrand_id", type="bigint")
*/
private $posbrand_id;
/**
* @var string
* @ORM\Column(name="posbrand_name", type="string")
*/
private $posbrand_name;
/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set posbrand_id
* @param integer $posbrandId
* @return Brand
*/
public function setPosbrandId($posbrandId)
{
$this->posbrand_id = $posbrandId;
return $this;
}
/**
* Get posbrand_id
* @return integer
*/
public function getPosbrandId()
{
return $this->posbrand_id;
}
...
}