2016-01-20 38 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