我已经看到很多关于如何在Symfony2中的表单上设置默认数据的主题,但是我没有找到任何关于如何使用查询构建器在实体窗口小部件中设置默认数据的内容。我解释了我的问题:
我有两个实体,通信和状态,与ManyToOne的关系。 这是我的沟通课程:
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;}
这是我的Status类:
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);
....
}
我给你的实体的setter和getter: 沟通:
/**
* 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();
}
你说学说自动检查对象。那么,通常,doctrine是否执行查询并在数据库中搜索对象的当前值并将其作为默认选择传递?
有了这个,我可以修改我的实体,但我不知道如何将我当前的实体Status值作为小部件“entity”的默认值。方法“getCodeOnly”在数据库中搜索状态(完整,已取消,InProgress,已删除)的attibut代码的值,并始终将Complete作为默认值传递。例如,如果一个实体为值Canceled,我想在使用此表单修改我的实体时将Canceled作为默认值。
我不能使用getData和preferred_choice来访问状态值,因为preferred_choice需要一个数组作为参数而不是实体。
我还尝试构建一个具有不同状态值的数组并将其传递给我的表单但是由于我的数据库有几个问题,它失败了。
如果有人有任何信息可以解决这个问题,我很乐意看到它。