Symfony 3.3 - Doctrine - Doctrine - 坚持一个连接表
问题描述:
我正在开发一个PHP框架Symfony 3.3和ORM主义的网站。Symfony 3.3 - Doctrine - Doctrine - 坚持一个连接表
我有用户,每个用户都可以提供服务。服务可以由多个用户提供。
一切运作良好,除非我想坚持一个用户的服务列表。什么都没有发生,我没有得到任何错误。你能看到我的代码中有什么错误吗?
我的User类(的一部分):
class User implements AdvancedUserInterface, \Serializable
{
public function __construct(){
$this->services = new ArrayCollection(); // Services offered by the user
}
/**
*
* @var Doctrine\Common\Collections\ArrayCollection $services
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Service", inversedBy="users")
* @ORM\JoinTable(name="service_offer")
*
*/
private $services;
function getServices() {
return $this->services;
}
function setServices(ArrayCollection $services) {
$this->services = $services;
return $this;
}
}
我的服务类(的一部分):
class Service
{
/**
* @var integer
*
* @ORM\Column(name="id_service", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idService;
/**
* @var \Doctrine\Common\Collections\ArrayCollection $users
*
* @ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="services")
*
**/
private $users;
}
在我的控制,我有:
class ServiceOfferController extends Controller {
/**
*
* @param EntityManagerInterface $em
*
*
* @Route("/member/ServiceOffer", name="ServiceOffer")
*/
public function serviceOfferAction(Request $request, EntityManagerInterface $em){
//$user = $this->getUser();
$form = $this->createForm(ServiceOfferType::class);
$form->handleRequest($request);
if ($form->isSubmitted()){
// Services ticked in the formular
$services = $form->get('services')->getData();
$user = $this->getUser();
$user->setServices($services);
print_r($user->getServices());
// Persisting in the DB
$em->persist($user);
$em->flush();
}
return $this->render('serviceOffer.html.twig', array(
'form' => $form->createView()
));
}
}
“print_r($ user-> getServices ());”返回数据,但没有任何内容保留在表service_offer中。任何想法?
在此先感谢。
编辑:
也试图与指定的列,这样的:
/**
*
* @var Doctrine\Common\Collections\ArrayCollection $services
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Service", inversedBy="users")
* @ORM\JoinTable(name="service_offer",
* joinColumns={
* @ORM\JoinColumn(name="id_user", referencedColumnName="id_user", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="id_service", referencedColumnName="id_service", onDelete="CASCADE")
* }
*)
*
*/
private $services;
编辑2:
我service_offer MySQL表为:
CREATE TABLE `service_offer` (
`id_service_offer` INT(11) NOT NULL AUTO_INCREMENT,
`id_user` INT(11) NULL DEFAULT NULL,
`id_service` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id_service_offer`),
INDEX `fk_service_idx` (`id_service`),
INDEX `fk_user_idx` (`id_user`),
CONSTRAINT `fk_service` FOREIGN KEY (`id_service`) REFERENCES `service` (`id_service`),
CONSTRAINT `fk_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`)
)
答
尝试指定连接表的列参数。
/**
*
* @var Doctrine\Common\Collections\ArrayCollection $services
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Service", inversedBy="users")
* @ORM\JoinTable(name="user_service",
* joinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="CASCADE")
* }
*)
*
*/
private $services;
谢谢!实际上已经尝试过。刚刚尝试过,仍然是同样的问题。要用你的解决方案编辑我的第一篇文章。我已经为这个问题奋斗了很多天了!我真的不知道如何调试,因为没有错误...你有什么想法吗? –
我不明白你在哪里定义$服务在功能 –
我在我的代码中有类似的实体关系,它的工作原理。也许你需要清理实体元数据并再次更新模式? –