我在实体 User 和实体 Contract 之间建立了 OnetoMany 关系。(一个用户可以拥有多个合约)
我有 2 个捆绑包,一个用于扩展 fosuser (Userbundle),一个用于所有其他 ToolsBundle。
所以,我有一个用户列表,每个用户旁边都有链接。一个链接是合同,该合同路由到同一捆绑包(toolsBundle)中的控制器,当我尝试找到具有良好 ID 的合同时,它告诉我
MyApp\UserBundle\Entity\Contract 类在第 194 行不存在 Symfony2/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php
当然合同在 MyApp\ToolsBundle\Entity\Contract
我不知道怎么了...
<?php
namespace Furter\ToolsBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use MyApp\ToolsBundle\Entity\Contract;
use MyApp\ToolsBundle\Form\ContractForm;
class DefaultController extends Controller
{
public function editContractAction($id = null)
{
$message='';
$em = $this->container->get('doctrine')->getEntityManager();
if (isset($id))
{
$repository = $this->container->get('doctrine')
->getRepository('MyAppToolsBundle:Contract');
$contract = $repository->findBy(
array('id' => $id),
array('end' => 'ASC'));
if (!$contract)
{
$message='Aucun contrat trouvé';
}
}
else
{
$contract = new Contract();
}
$form = $this->container->get('form.factory')->create(new ContractForm(), $contract);
$request = $this->container->get('request');
if ($request->getMethod() == 'POST')
{
$form->bindRequest($request);
if ($form->isValid())
{
$em->persist($contract);
$em->flush();
if (isset($id))
{
$message='Contrat modifié avec succès !';
}
else
{
$message='Contrat ajouté avec succès !';
}
}
}
return $this->container->get('templating')->renderResponse(
'MyAppToolsBundle:Admin:contract.html.twig',
array(
'form' => $form->createView(),
'message' => $message,
));
}
}
奇怪的是,如果我在没有 ID 的情况下进行编辑(要创建一个完美运行的合同,只有当我找到匹配项时...
我不知道这是否正确:
$contract = $repository->findBy(
array('id' => $id),
array('end' => 'ASC'));
但没关系我尝试了一个简单的
$contract = $em->getRepository('MyAppToolsBundle:Contract')->find($id);
我有同样的错误。我被卡住了,我真的不知道为什么 symfony 认为该实体是我的另一个 Bundle 而不是我的 toolsBundle ......
谢谢。
编辑:我的合同课
<?php
namespace MyApp\ToolsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
*/
class Contract
{
/**
* @ORM\GeneratedValue
* @ORM\Id
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="MyApp\UserBundle\Entity\User", inversedBy="contracts")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* @ORM\Column(type="float")
* @Assert\NotBlank()
* @Assert\MinLength(2)
*/
private $rate;
/**
* @ORM\Column(type="date", nullable="true")
*/
private $start;
/**
* @ORM\Column(type="date", nullable="true")
*/
private $end;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set rate
*
* @param float $rate
*/
public function setRate($rate)
{
$this->rate = $rate;
}
/**
* Get rate
*
* @return float
*/
public function getRate()
{
return $this->rate;
}
/**
* Set start
*
* @param date $start
*/
public function setStart($start)
{
$this->start = $start;
}
/**
* Get start
*
* @return date
*/
public function getStart()
{
return $this->start;
}
/**
* Set end
*
* @param date $end
*/
public function setEnd($end)
{
$this->end = $end;
}
/**
* Get end
*
* @return date
*/
public function getEnd()
{
return $this->end;
}
/**
* Set user
*
* @param MyApp\ToolsBundle\Entity\User $user
*/
public function setUser(\MyApp\ToolsBundle\Entity\User $user)
{
$this->user = $user;
}
/**
* Get user
*
* @return MyApp\ToolsBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}