这是一个基本问题,我有一个我想要引用的关联对象,但它没有被实例化。不确定我做错了什么。
我有对象MARKET和VENDOR关联一对多。市场有很多供应商,供应商只有一个市场。我在加载供应商时希望得到市场对象。
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对象时,我发现没有市场设置。请注意,有一个marketId,但不包括市场对象。
"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: "rdumm@a-air.net; jmatthews@a-air.net"
-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 :(得分:0)
market_id
中有Vendor
列重复。您实际上不需要$marketId
字段。
删除$marketId
并仅保留$market
。
当您想要访问市场ID时,您可以执行以下操作:
$vendor->getMarket()->getId();
答案 1 :(得分:0)
以下是我找到的解决方案,由于我创建实体的方式,这似乎是一个特定的案例。
我在这里使用逆向工程方法来创建我的实体:http://symfony.com/doc/current/doctrine/reverse_engineering.html
事实证明,这并没有正确设置关联实体,因为一些必要的注释没有自动添加到Market.php类中。
我不得不补充道:
* @ORM\Table(name="market")**
并指定主键:
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
现在正在填充与供应商相关的市场对象。