我已经看到很多关于如何在 Symfony2 中的表单上设置默认数据的主题,但是我没有找到任何关于如何使用查询构建器在实体小部件中设置默认数据的信息。我解释我的问题:
我有两个实体,通信和状态,具有多对一的关系。这是我的沟通课:
class Communication{
/**
* @ORM\Id
* @ORM\Column(name="Comm_CommunicationId")
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Test\DatabaseBundle\Entity\Statut", inversedBy="communication")
* @ORM\JoinColumn(name="Comm_Status", referencedColumnName="Capt_Code")
*/
private $statut;}
这是我的状态类:
class Statut{
/**
* @ORM\Id
* @ORM\Column(name="Capt_CaptionId")
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @ORM\Column(name="Capt_Code", type="string")
*/
private $code;
/**
* @ORM\Column(name="Capt_FR", type="string")
*/
private $codefr;}
我已经构建了一个 CommunicationType 表单来允许我修改一个通信实体:
public function buildForm(FormBuilder $builder, array $options)
{
$builder -> add('caseid','text')
-> add('statut','entity', array('class' => 'Test\DatabaseBundle\Entity\Statut',
'query_builder' => function(\Test\DatabaseBundle\Entity\StatutRepository $sr){
$res = $sr->getCodeOnly();
return $res; },
'property' => 'CodeFr',
'preferred_choices' => array(1),
));}
这是我的控制器:
public function ModifierAction($commid){
$comm = $this -> getDoctrine()
-> getEntityManager()
-> getRepository('Test\DatabaseBundle\Entity\Communication')
-> find($commid);
$form = $this -> createForm(new CommunicationType($em), $comm);
....
}
我给你我的实体的设置者和获取者:通信:
/**
* Set id
*
* @param integer $Id
*/
public function setId($Id)
{
$this -> id = $Id;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
状态实体:
/**
* Set id
*
* @param integer $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
} /**
* Set code
*
* @param string $code
*/
public function setCode($code)
{
$this->code = $code;
}
/**
* Get code
*
* @return string
*/
public function getCode()
{
return $this->code;
} /**
* Add communication
*
* @param Acme\StoreBundle\Entity\Communication $communication
*/
public function addCommunication(\Test\DatabaseBundle\Entity\Communication $communication)
{
$this->communication[] = $communication;
}
/**
* Get communication
*
* @return Doctrine\Common\Collections\Collection
*/
public function getCommunication()
{
return $this->ccommunication;
} public function __construct()
{
$this->communication = new ArrayCollection();
}
你说学说自动检查对象。您是否通常会在数据库中执行查询和搜索对象的当前值并将其作为默认选择传递?
有了这个我可以修改我的实体,但我不知道如何将我当前的实体状态值作为小部件“实体”的默认值。方法“getCodeOnly”在数据库中搜索状态码的值(Complete、Cancelled、InProgress、Deleted),并始终将 Complete 作为默认值传递。例如,如果一个实体作为 Cancelled 的值,当我使用此表单修改我的实体时,我想将 Canceled 作为默认值。
我不能使用 getData 和 preferred_choice 来访问状态值,因为 preferred_choice 需要一个数组作为参数而不是实体。
我还尝试使用不同的状态值构建一个数组并将其传递给我的表单,但是由于我的数据库有几个问题,它失败了。
如果有人有任何信息可以解决这个问题,我会很高兴看到它。