2017-05-19 3 views
0

Dies ist ein grundlegendes Problem, bei dem ich ein zugeordnetes Objekt habe, auf das ich verweisen möchte, das aber nicht instanziiert wird. Ich bin mir nicht sicher, was ich falsch mache.Symfony3 - Doctrine associated object wird nicht ausgefüllt

Ich habe Objekte MARKET und und VENDOR eine zu viele zugeordnet. Märkte haben viele Anbieter, Anbieter haben nur einen Markt. Ich suche das Marktobjekt, wenn ich den Verkäufer lade.

class Vendor 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Expedient\PurchaseBundle\Entity\Market", inversedBy="vendors") 
    * @ORM\JoinColumn(name="market_id", referencedColumnName="id", nullable=true, onDelete="SET NULL") 
    */ 

    private $market; 

/** 
* @var int 
* 
* @ORM\Column(name="market_id", type="integer", nullable=true) 
*/ 
private $marketId; 

... 

/** 
* Set market 
* 
* @param \Expedient\PurchaseBundle\Entity\Market $market 
* 
* @return Market 
*/ 
public function setMarket(\Expedient\PurchaseBundle\Entity\Market $market = null) 
{ 
    $this->market = $market; 

    return $this; 
} 

/** 
* Get market 
* 
* @return \Expedient\PurchaseBundle\Entity\Market 
*/ 
public function getMarket() 
{ 
    return $this->market; 
} 

Wenn ich das Vendor-Objekt finde, sehe ich, dass kein Markt eingestellt ist Beachten Sie, dass es eine MarketId gibt, aber kein Marktobjekt ist enthalten.

"vendor" => Vendor {#117 ▼ 
    -market: null 
    -id: "11" 
    -name: "A-Air Company" 
    -account: "" 
    -attn: "Rege Dumm/John Matthews" 
    -address1: "206 Overlook Drive" 
    -address2: "" 
    -city: "Sewickley" 
    -state: "PA" 
    -zip: "15143" 
    -country: "USA" 
    -phone: "412-741-9420" 
    -cellPhone: null 
    -fax: "412-749-8590" 
    -tag: "A-Air Company" 
    -active: true 
    -email: "[email protected]; [email protected]" 
    -securityAgreement: true 
    -securityAgreementDate: DateTime {#114 ▶} 
    -insuranceCert: true 
    -insuranceCertDate: null 
    -marketId: 1 
    } 

Der Markt Klasse existiert und hat die inverse eingerichtet:

<?php 

namespace Expedient\PurchaseBundle\Entity; 

/** 
* Market 
*/ 
class Market 
{ 

    /** 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="Vendor", mappedBy="market") 
    */ 
    protected $vendors; 

    public function __construct() 
    { 
     $this->vendors = new ArrayCollection(); 
    } 
} 

nicht sicher, wo ich mit diesem schief gehen könnte. Ich bin neu in Symfony 3.

Antwort

0

Sie haben market_id Spalte in Vendor dupliziert. Sie brauchen kein Feld $marketId.

Entfernen Sie $marketId und behalten Sie nur $market.

, wenn Sie Markt ID zugreifen möchten, können Sie wie etwas tun:

$vendor->getMarket()->getId(); 
0

Hier ist die Lösung, die ich gefunden, scheint wie ein spezifischer Fall durch, wie ich das Unternehmen erstellt.

verwendete ich das Reverse-Engineering-Methode hier meine Einheiten zu erstellen: http://symfony.com/doc/current/doctrine/reverse_engineering.html

Es stellte sich heraus, dass dies die Entitäten für Verbände nicht richtig eingerichtet ist, wie einige der notwendigen Annotationen nicht automatisch in die Market.php hinzugefügt wurden Klasse.

musste ich hinzufügen:

* @ORM\Table(name="market")** 

Und Primärschlüssel angegeben:

/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

Und jetzt das Markt zum Anbieter im Zusammenhang Objekt gefüllt wird.

Verwandte Themen