![](/img/trans.png)
[英]setting 'by reference' to false, on symfony form throws 'Could not determine access type'
[英]Symfony Could not determine access type when using EntityType form builder
我有2个实体的Cars
和Parts
,我希望能够创建具有多个零件的新汽车。 因此,我在CarsType
中CarsType
了此表单
$builder->
add('make')->
add('model')->
add('travelledDistance')->
add('parts',EntityType::class,array(
'class' => Parts::class,
'choice_label'=>"name",
'query_builder' => function(PartsRepository $partsRepository){
return $partsRepository->getAllPartsForCarsForm();
},
'multiple' => true
));
它给我这个错误
无法确定类“ AppBundle \\ Entity \\ Cars”中属性“ parts”的访问类型。
这是我的实体Cars
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Cars
*
* @ORM\Table(name="cars")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CarsRepository")
*/
class Cars
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Make", type="string", length=255)
*/
private $make;
/**
* @var string
*
* @ORM\Column(name="Model", type="string", length=255)
*/
private $model;
/**
* @var int
*
* @ORM\Column(name="TravelledDistance", type="bigint")
*/
private $travelledDistance;
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Parts", inversedBy="cars")
* @ORM\JoinTable(
* name="Parts_Cars",
* joinColumns={
* @ORM\JoinColumn(name="Part_Id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="Car_Id", referencedColumnName="id")
* })
*/
private $parts;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set make
*
* @param string $make
*
* @return Cars
*/
public function setMake($make)
{
$this->make = $make;
return $this;
}
/**
* Get make
*
* @return string
*/
public function getMake()
{
return $this->make;
}
/**
* Set model
*
* @param string $model
*
* @return Cars
*/
public function setModel($model)
{
$this->model = $model;
return $this;
}
/**
* Get model
*
* @return string
*/
public function getModel()
{
return $this->model;
}
/**
* Set travelledDistance
*
* @param integer $travelledDistance
*
* @return Cars
*/
public function setTravelledDistance($travelledDistance)
{
$this->travelledDistance = $travelledDistance;
return $this;
}
/**
* Get travelledDistance
*
* @return int
*/
public function getTravelledDistance()
{
return $this->travelledDistance;
}
/**
* @return mixed
*/
public function getParts()
{
return $this->parts;
}
}
如果这很重要,那是我的Parts
实体
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Parts
*
* @ORM\Table(name="parts")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PartsRepository")
*/
class Parts
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="Price", type="decimal", precision=10, scale=2)
*/
private $price;
/**
* @var int
*
* @ORM\Column(name="Quantity", type="integer")
*/
private $quantity;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Suppliers", inversedBy="parts")
* @ORM\JoinColumn(name="Supplier_Id", referencedColumnName="id")
*/
private $supplier;
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Cars", mappedBy="parts")
*/
private $cars;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Parts
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set price
*
* @param string $price
*
* @return Parts
*/
public function setPrice($price)
{
$this->price = $price;
return $this;
}
/**
* Get price
*
* @return string
*/
public function getPrice()
{
return $this->price;
}
/**
* Set quantity
*
* @param integer $quantity
*
* @return Parts
*/
public function setQuantity($quantity)
{
$this->quantity = $quantity;
return $this;
}
/**
* Get quantity
*
* @return int
*/
public function getQuantity()
{
return $this->quantity;
}
/**
* @return mixed
*/
public function getSupplier()
{
return $this->supplier;
}
/**
* @return mixed
*/
public function getCars()
{
return $this->cars;
}
public function __toString()
{
return $this->getName();
}
}
为了节省时间,这里是两个实体之间的映射以及Cars
的属性parts
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Parts", inversedBy="cars")
* @ORM\JoinTable(
* name="Parts_Cars",
* joinColumns={
* @ORM\JoinColumn(name="Part_Id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="Car_Id", referencedColumnName="id")
* })
*/
private $parts;
和Parts
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Cars", mappedBy="parts")
*/
private $cars;
这是newAction
中的CarsController
/**
* Creates a new car entity.
*
* @Route("/new", name="cars_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request)
{
$carsRepository = $this->getDoctrine()->getManager()->getRepository('AppBundle:Cars');
$car = new Cars();
$form = $this->createForm('AppBundle\Form\CarsType', $car);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($car);
$em->flush();
return $this->redirectToRoute('cars_show', array('id' => $car->getId()));
}
return $this->render('cars/new.html.twig', array(
'car' => $car,
'form' => $form->createView(),
));
}
我的问题是-如何做到这一点,以便可以创建具有多个零件的新Car并将关系保存到数据库中,以便在检索Car时也可以获取零件?
基本上,如何做到这一点,以便在我创建新车时将关系保存在保存ID的parts_cars
表中?
由于您正在执行ManyToMany(EntityToEntity),因此@JoinColumn
指令。
尝试将其从Cars实体中删除。
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Parts", inversedBy="cars")
*/
$parts
您需要指定JoinColumns的唯一情况是:
A OneToMany J ManyToOne B
会容易A OneToMany J ManyToOne B
由于您没有执行上述任何操作,因此Doctrine无法访问用于连接的实体的IDENTITY字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.