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; 
+0

谢谢!实际上已经尝试过。刚刚尝试过,仍然是同样的问题。要用你的解决方案编辑我的第一篇文章。我已经为这个问题奋斗了很多天了!我真的不知道如何调试,因为没有错误...你有什么想法吗? –

+1

我不明白你在哪里定义$服务在功能 –

+1

我在我的代码中有类似的实体关系,它的工作原理。也许你需要清理实体元数据并再次更新模式? –