2016-01-20 23 views
1

我有一个页面address.html.twig,用户可以在表UserAddress中添加许多地址。当他在数据库中添加他的地址时,应该在他添加地址的同一页面中呈现地址,然后他可以选择他想使用的地址。不幸的是地址不是渲染。学说和Symfony2:协会是指不存在的反面错误

首先,我以为我的控制器操作或我的树枝页面有问题。我甚至在这里问了一个问题吧=>here

我验证了我的所有表中的phpmyadmin和所有的人都是很好的链接,但如果我这样做:PHP应用程序/控制台学说:架构:验证 我有这个错误:

[映射] FAIL - 实体级 'FLY \ BookingsBundle \实体\ Commandes' 映射无效: *的关联FLY \ BookingsBundle \实体\ Commandes#用户指逆侧场 Application \ Sonata \ UserBundle \ Entity \ User#commandes其中不存在 存在。

[映射] FAIL - 实体级 'FLY \ BookingsBundle \实体\ UserAddress' 映射无效: *的关联FLY \ BookingsBundle \实体\ UserAddress#用户指逆侧场 应用\奏\ UserBundle \ Entity \ User#地址不存在 。

看一看这样的画面:

enter image description here

这是我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

这可能是一个命名空间错误。用户如何拥有@ORM \ Entity(repositoryClass =“FLY \ UserBundle \ Repository \ UserRepository”)的存储库类,但根据Commandes,用户实体位于Application \ Sonata \ UserBundle \ Entity \ User中 - 在单独的包中生成。彻底检查你的映射是否指向你实体的正确命名空间。 – Richard

回答

0

这里有一个从我的应用程序的一个例子 - 我这样做你commandes实体。 您可以自己将您的UserAddress实体拼凑在一起!

这里所说:

user.php的

/** 
* @ORM\OneToMany(targetEntity="FLY\BookingsBundle\Entity\Commandes", mappedBy="commandesUser") 
*/ 
protected $commandes; 

user.php的 - getter和setter

/** 
* 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 - getter和setter

/** 
* 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; 
} 
+0

我试着用你的代码,但仍然不起作用:'*关联FLY \ BookingsBundle \ Entity \ Commandes#commandesUser引用不存在的反面字段Application \ Sonata \ UserBundle \ Entity \ User#commandes。' – Sirius

0

我已经已经弹出2-3倍,在过去的几年里,这里的映射是不正确的,但在架构更新是成功的一个问题。映射确定之后,这并不反映在模式中,symfony认为它已经是最新的。

我建议你试着从你的用户,COMMANDE和地址表中手动删除培训相关关系,然后运行:

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

- 它可能会解决您的问题。

+0

抱歉,延迟响应。我更新后在(user,commandes,UserAddress)中手动删除了关系--force和schema验证我没有得到任何错误。但我仍然希望我的桌子是链接的,因为我需要渲染一些关于用户的细节,如地址和指挥官。 – Sirius

+0

一旦你运行命令它会重新创建外键链接 –

+0

感谢您的帮助:)今天早上,我找到了解决我的问题的方法。我在我的user.php中写下了关系,但它不起作用,所以我决定在这个文件中建立关系:'Application \ Sonata \ UserBundle \ Resources \ config \ doctrine \ User.orm.xml',它完全适合我地址呈现为我想要的。这就是我做的: '<一对多字段=“地址”target-entity =“FLY \ BookingsBundle \ Entity \ Address”mapped-by =“user”> <1对多字段=“commandes”target-entity =“FLY \ BookingsBundle \ Entity \ Commandes”mapped-by =“user”> Sirius