2017-05-19 7 views
0

これは私が参照したいオブジェクトを持っていて、インスタンス化されていないという基本的な問題です。私が間違っていることを確信していない。Symfony3 - Doctrine関連のオブジェクトが設定されていません

私は多くのオブジェクトにMARKETとVENDORというオブジェクトが関連付けられています。市場には多くのベンダーがあり、ベンダーには1つの市場しかありません。私は、ベンダーをロードするときにマーケットオブジェクトを取得しようとしています。

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; 
} 

私はVendorオブジェクトを見つけると、マーケットセットがないことがわかります。マーケットアイデアはあるが、マーケットオブジェクトは含まれていないことに注意してください。

"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 
    } 

市場のクラスが存在し、セットアップ逆があります

<?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(); 
    } 
} 

わからない私はこれで間違っている可能性があります。私はSymfony 3を初めて使用しています。

答えて

0

Vendormarket_idの列が重複しています。実際には$marketIdフィールドは必要ありません。

$marketIdを削除してください。$marketとしてください。

あなたは、市場のIDにアクセスしたいときは、あなたが何か行うことができます:原因私はエンティティを作成する方法に

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

はここで、私が見つけた解決策だ特定のケースのように思えるが。

私は私のエンティティを作成するためにここにリバースエンジニアリングの方法を使用:必要な注釈の一部が自動的にMarket.phpに追加されなかったとしてhttp://symfony.com/doc/current/doctrine/reverse_engineering.html

が、これは正しく団体のためのエンティティを設定していないことが判明クラス。

私は追加する必要がありました:

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

を主キーを指定:

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

そして今ベンダーに関連市場オブジェクトが満たされているが。

関連する問題