Symfony 3.3 多对多不';不坚持
我正在用PHP框架Symfony 3.3和ORM原则开发一个网站 我有用户,每个用户都可以提供服务。一项服务可以由多个用户提供 一切都很好,除了我想要持久化用户的服务列表时。什么也没发生,我也没发现任何错误。你能看到我的代码中有什么错误吗 My MySQL用户表:Symfony 3.3 多对多不';不坚持,symfony-3.3,Symfony 3.3,我正在用PHP框架Symfony 3.3和ORM原则开发一个网站 我有用户,每个用户都可以提供服务。一项服务可以由多个用户提供 一切都很好,除了我想要持久化用户的服务列表时。什么也没发生,我也没发现任何错误。你能看到我的代码中有什么错误吗 My MySQL用户表: CREATE TABLE `user` ( `id_user` INT(11) NOT NULL AUTO_INCREMENT, `firstname` VARCHAR(255) NOT NULL, `surname` VARCHAR
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服务提供表:
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;
}
}
此代码:
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
有什么想法吗
提前感谢!:) 您也可以尝试持久化这些服务吗?例如:
$user->setServices($services);
$em->persist($user);
$em->persist($services);
$em->flush();
终于找到了问题所在!!!:) 我的“\src\AppBundle\Resources\config\doctor”文件夹中有XML文件,因为我从现有数据库生成了实体类。但是多对多连接不是自动生成的,所以我必须手动添加它 每次我启动此命令时:
php bin/console doctrine:schema:update --force
我有消息说一切都是最新的。但实际上,Symfony使用的是存储在XML文件中的信息,而不是注释中的信息
所以,我删除了XML文件,再次更新了我的模式,现在它开始工作了。我看到Symfony更新了表服务提供,并删除了实际上不需要的“id服务提供”列。有人知道吗?谢谢你的回复。我收到了错误消息:在链配置的命名空间AppBundle\Entity中找不到类“条令\Common\Collections\ArrayCollection”。我认为这很正常。我们无法保留ArrayCollection。或者?要导入ArrayCollection,可能需要在PHP文件顶部包含一条
use
语句。尝试将这一行放在文件的顶部:use-Doctrine\Common\Collections\ArrayCollection代码>。另请参阅本文,了解有关PHP名称空间和导入的更多信息:在我的用户类中已经有了它。将其添加到控制器中,但仍然存在相同的错误。但是我们可以持久化一个数组吗?你可以持久化一个ArrayCollection。我认为ArrayCollection对象实际上是在一个原则中定义的。但是,不能持久化纯数组。如果处理的是标准PHP数组,则可以使用$servicesCollection=new ArrayCollection($services)
将其转换为ArrayCollection。
php bin/console doctrine:schema:update --force