2017-09-02 76 views
0

我正在開發一個PHP框架Symfony 3.3和ORM主義的網站。多對多不堅持

我有用戶,每個用戶都可以提供服務。服務可以由多個用戶提供。

一切運作良好,除非我想堅持用戶的服務列表。什麼都沒有發生,我沒有得到任何錯誤。你能看到我的代碼中有什麼錯誤嗎?

我的MySQL用戶表:

CREATE TABLE `user` (
`id_user` INT(11) NOT NULL AUTO_INCREMENT, 
`firstname` VARCHAR(255) NOT NULL, 
`surname` VARCHAR(255) NOT NULL, 
`address` VARCHAR(255) NOT NULL, 
`zip` VARCHAR(4) NOT NULL, 
`city` VARCHAR(255) NOT NULL, 
`phone_number` VARCHAR(12) NULL DEFAULT NULL, 
`mobile_number` VARCHAR(12) NULL DEFAULT NULL, 
`email` VARCHAR(255) NOT NULL, 
`password` VARCHAR(255) NOT NULL, 
`birth_date` DATE NOT NULL, 
`is_verified` TINYINT(4) NULL DEFAULT NULL, 
`id_gender` INT(11) NOT NULL, 
PRIMARY KEY (`id_user`), 
UNIQUE INDEX `e-mail_UNIQUE` (`email`), 
UNIQUE INDEX `id_utilisateur_UNIQUE` (`id_user`), 
INDEX `fk_id_gender_idx` (`id_gender`), 
CONSTRAINT `fk_id_gender` FOREIGN KEY (`id_gender`) REFERENCES `gender`   (`id_gender`) 
) 

我的MySQL service_offer表:

CREATE TABLE `service_offer` (
`id_service_offer` INT(11) NOT NULL AUTO_INCREMENT, 
`id_user` INT(11) NOT NULL, 
`id_service` INT(11) NOT NULL, 
PRIMARY KEY (`id_service_offer`), 
UNIQUE INDEX `id_user_UNIQUE` (`id_user`), 
INDEX `fk_service_idx` (`id_service`), 
CONSTRAINT `fk_service` FOREIGN KEY (`id_service`) REFERENCES `service` (`id_service`), 
CONSTRAINT `fk_user` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`) 
) 

我的MySQL服務表:

CREATE TABLE `service` (
`id_service` INT(11) NOT NULL AUTO_INCREMENT, 
`name` VARCHAR(255) NOT NULL, 
`description` VARCHAR(255) NULL DEFAULT NULL, 
PRIMARY KEY (`id_service`), 
UNIQUE INDEX `id_service_UNIQUE` (`id_service`) 
) 

我的用戶實體的一部分:

/** 
* @var integer 
* 
* @ORM\Column(name="id_user", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $idUser; 

/** 
* 
* @ORM\ManyToMany(targetEntity="Service") 
* @ORM\JoinTable(name="service_offer", 
*  joinColumns={@ORM\JoinColumn(name="id_user", referencedColumnName="id_user")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="id_service", referencedColumnName="id_service")} 
*  ) 
*/ 
private $services; 

function getServices() { 
    return $this->services; 
} 

function setServices($services) { 
    $this->services = $services; 
    return $this; 
} 

我的服務實體類:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Service 
* 
* @ORM\Table(name="service", uniqueConstraints={@ORM\UniqueConstraint(name="id_service_UNIQUE", columns={"id_service"})}, indexes={@ORM\Index(name="fk_user_idx", columns={"user"})}) 
* @ORM\Entity 
*/ 
class Service 
{ 
/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255, nullable=false) 
*/ 
private $name; 

/** 
* @var string 
* 
* @ORM\Column(name="description", type="string", length=255, nullable=true) 
*/ 
private $description; 

/** 
* @var integer 
* 
* @ORM\Column(name="id_service", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $idService; 



/** 
* Set name 
* 
* @param string $name 
* 
* @return Service 
*/ 
public function setName($name) 
{ 
    $this->name = $name; 

    return $this; 
} 

/** 
* Get name 
* 
* @return string 
*/ 
public function getName() 
{ 
    return $this->name; 
} 

/** 
* Set description 
* 
* @param string $description 
* 
* @return Service 
*/ 
public function setDescription($description) 
{ 
    $this->description = $description; 

    return $this; 
} 

/** 
* Get description 
* 
* @return string 
*/ 
public function getDescription() 
{ 
    return $this->description; 
} 

/** 
* Get idService 
* 
* @return integer 
*/ 
public function getIdService() 
{ 
    return $this->idService; 
} 
} 

如果我做了一個控制器,沒有什麼是數據庫中的堅持:

$user->setServices($services); 

$em->persist($user); 
$em->flush(); 

此代碼:

print_r($services); 

返回

Doctrine\Common\Collections\ArrayCollection Object ([elements:Doctrine\Common\Collections\ArrayCollection:private] => Array ([0] => AppBundle\Entity\Service Object ([name:AppBundle\Entity\Service:private] => sdfgsdf [description:AppBundle\Entity\Service:private] => sdfgsdf [idService:AppBundle\Entity\Service:private] => 2))) 

而這種代碼:

echo $services[0]->getName(); 

返回此:

sdfgsdf 

任何想法?

在此先感謝! :)

+0

任何人有任何想法? –

回答

0

最後發現是什麼問題!!! :) :)

我的XML文件在我的「的\ src \的appbundle \資源\ CONFIG \主義」的文件夾,因爲我生成我的實體類從現有數據庫。但是多對多連接並不是自動生成的,所以我不得不手動添加它。

每次我推出這個命令:

php bin/console doctrine:schema:update --force 

我有信息,一切是最新的。但實際上,Symfony的使用存儲在XML文件,而不是在註釋中的信息....

所以,我刪除XML文件,再次更新我的架構,現在它的工作。我看到Symfony更新了表service_offer並刪除了實際上不需要的「id_service_offer」列。

1

你可以嘗試堅持的服務呢?例如:

$user->setServices($services); 

$em->persist($user); 
$em->persist($services); 
$em->flush(); 
+0

Thnaks爲您的答覆。我收到錯誤消息:在鏈配置的命名空間AppBundle \ Entity中找不到類'Doctrine \ Common \ Collections \ ArrayCollection'。我認爲這很正常。我們不能堅持一個ArrayCollection。要麼? –

+0

您可能需要在PHP文件的頂部包含'use'語句來導入ArrayCollection。試着把這一行放在文件的頂部:'使用Doctrine \ Common \ Collections \ ArrayCollection;'。另請參閱以下關於PHP命名空間和導入的更多信息:http://php.net/manual/en/language.namespaces.importing.php –

+0

已經在我的用戶類中。在控制器中添加它,但仍然是相同的錯誤。但是我們可以堅持一個數組嗎? –