我有一个页面address.html.twig,用户可以在表UserAddress中添加许多地址。当他在数据库中添加他的地址时,地址应该在他添加地址的同一页面中呈现,然后他可以选择他想要使用的地址。不幸的是,地址不是渲染的。
首先我认为我的控制器操作或我的树枝页面有问题。我甚至在这里问过一个关于它的问题=> here
我在phpmyadmin中验证了所有表格,所有这些都很好的链接,但如果我这样做:php app / console doctrine:schema:validate 我有这个错误:
[Mapping] FAIL - 实体类 'FLY \ BookingsBundle \ Entity \ Commandes'映射无效: * FLY \ BookingsBundle \ Entity \ Commandes#user关联是指反面字段 Application \ Sonata \ UserBundle \ Entity \ User#commandes没有 存在。
[Mapping] FAIL - 实体类 'FLY \ BookingsBundle \ Entity \ UserAddress'映射无效: * FLY \ BookingsBundle \ Entity \ UserAddress#user关联是指反面字段 Application \ Sonata \ UserBundle \ Entity \ User#address没有 存在。
看看这张照片:
这是我的UserAddress.php
/**
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="address")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
Commandes.php
/**
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="commandes")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
user.php的
/**
* @ORM\Entity(repositoryClass="FLY\UserBundle\Repository\UserRepository")
* @ORM\Table(name="fos_user_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
$this->commandes = new \Doctrine\Common\Collections\ArrayCollection();
$this->address = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @ORM\OneToMany(targetEntity="FLY\BookingsBundle\Entity\Commandes", mappedBy="user", cascade={"remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $commandes;
/**
* @ORM\OneToMany(targetEntity="FLY\BookingsBundle\Entity\UserAddress", mappedBy="user", cascade={"remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $address;
在这里你可以看到我的var转储:
User {#124 ▼
#id: 21
-commandes: null
-address: null
}
答案 0 :(得分:0)
这是我的一个应用程序的示例 - 我已经为您的commandes实体做了这个。 您自己可以将此用户地址实体与此示例拼凑起来!
这里是:
user.php的
/**
* @ORM\OneToMany(targetEntity="FLY\BookingsBundle\Entity\Commandes", mappedBy="commandesUser")
*/
protected $commandes;
User.php - Getters and Setters
/**
* Add commandes
*
* @param FLY\BookingsBundle\Entity\Commandes $commandes
*/
public function addCommandes(\FLY\BookingsBundle\Entity\Commandes $commandes)
{
$this->commandes[] = $commandes;
}
/**
* Get commandes
*
* @return Doctrine\Common\Collections\Collection
*/
public function getCommandes()
{
return $this->commandes;
}
Commandes.php
/**
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="commandes")
* @ORM\JoinColumn(name="user", referencedColumnName="id")
*/
private $commandesUser;
Commandes.php - Getters and Setters
/**
* Set commandesUser
*
* @param Application\Sonata\UserBundle\Entity\User $commandesUser
*/
public function setCommandesUser(\Application\Sonata\UserBundle\Entity\User $commandesUser = null)
{
$this->commandesUser = $commandesUser;
}
/**
* Get $commandesUser
*
* @return Application\Sonata\UserBundle\Entity\User
*/
public function getCommandesUser()
{
return $this->commandesUser;
}
答案 1 :(得分:0)
我有一个问题,在过去几年中出现了2-3次,其中映射不正确但架构更新成功。修复映射后,这并未反映在架构中,symfony认为它已经是最新的。
我建议您尝试从用户,命令和地址表中手动删除相关关系,然后运行:
php app/console doctrine:schema:update --force
- 它可能会解决您的问题。
答案 2 :(得分:0)
其他人很可能不会发生这种情况,但是有机会。
在我的情况下,出现此错误是因为重复。我的实体有2个字段,它们是ManyToOne
关系。而且他们都有相同的反向名称,从而导致了此错误。
这是相关的代码位:
class TaskIngredient
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Ingredient", inversedBy="taskIngredients")
* @ORM\JoinColumn(nullable=false)
*/
private $ingredient;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Task", inversedBy="taskIngredients")
* @ORM\JoinColumn(nullable=false)
*/
private $task;
}
解决方案相对容易。我尝试手动更改inversedBy
名称。但这并不能解决问题(即使应用了php app/console doctrine:schema:update --force
并删除了var/cache
文件夹之后)。
所以我只是:
php bin/console make:entity
工具并使用其他名称读取字段