我有2個表格,一個是GrowerProjection,一個是Crop。一個作物可以有許多與其相關的種植者預測。我帶着已經構建的底層數據庫進入了這個項目,在數據庫中,Crop有一個唯一的ID,例如CROP-001,存儲在名爲crop_ID的列中。在GrowerProjection表格中還有一個crop_ID字段,它可以讓你看到特定投影正在討論什麼。PHP/Symfony3/Doctrine關聯返回NULL
所以現在我已經使用Doctrine來生成實體,現在我正試圖將這些實體綁定在一起。當我嘗試創建一個ManyToOne關聯時,我總是返回一個空值。我的問題是:1.我做錯了什麼,以及2.我將來如何調試這些類型的問題?
我已經嘗試驗證架構並通過控制檯更新架構,但似乎沒有效果。
下面是Growerprojection的實體相關剪斷:
/**
* Growerprojection
*
* @ORM\Table(name="growerProjection")
* @ORM\Entity
*/
class Growerprojection
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Crop")
* @ORM\JoinColumn(name="cropId", referencedColumnName="cropId")
*/
private $crop;
/**
* @var string
*
* @ORM\Column(name="grower_ID", type="string", length=16, nullable=false)
*/
private $growerId;
/**
* @var string
*
* @ORM\Column(name="crop_ID", type="string", length=16, nullable=false)
*/
private $cropId;
public function getReadyToLoadDt() {
return $this->prjreadytoloaddt;
}
public function setReadyToLoadDt($theDate) {
$this->prjreadytoloaddt=$theDate;
}
public function getCrop() {
return $this->crop;
}
}
我曾嘗試與聯接列crop_ID和cropId,作爲指導思想是用cropId但實際的表使用crop_ID。我嘗試過使用和不使用@ID指令。不用找了。裁剪始終爲空。
這裏是作物實體部分:
/**
* Crop
*
* @ORM\Table(name="crop")
* @ORM\Entity
*/
class Crop
{
/**
* @var string
*
* @ORM\Column(name="commodity_ID", type="string", length=16, nullable=false)
*/
private $commodityId;
/**
* @var string
*
* @ORM\Column(name="crop_ID", type="string", length=16)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $cropId;
public function getCommodityID() {
return $this->commodityId;
}
}
然後,這裏是控制器的動作:
public function testAction(Request $request)
{
$repository = $this->getDoctrine()->getRepository('AppBundle:Growerprojection');
$projections = $repository->findBy(
array('growerId' => 'GROW-001'),
array('prjreadytoloaddt' => 'ASC')
);
$myCrop = $projections[0]->getCrop();
\Doctrine\Common\Util\Debug::dump($myCrop);
return $this->render('grower/growerTest.html.twig',
array('projections' => $projections));
}
此找到種植者投影,即種植者投影具有CROP-001作爲cropId,並且crop_ID爲CROP-001的作物表中有作物。
line \ Doctrine \ Common \ Util \ Debug :: dump($ myCrop);將始終生成NULL,並且當我在樹枝中執行dump()時,我還會看到投影到達並且已填充,但列裁剪爲空。
我在做什麼錯在這裏,我如何得到這個協會的工作,以及我將來如何調試這個,所以我不必糾纏它們嗎?
您好!我剛剛嘗試過,結果沒有發生變化。我注意到在Symfony調試欄中,它只做了1個數據庫查詢。 –
好吧,聽起來不太好。我還有3個想法:1.您是否嘗試過也刪除
@ORM\Id
?這可能與測繪有衝突。 2.您是否在更改映射後用bin/console cache:clear --no-warmup
清理了緩存? 3.數據庫中是否有外鍵映射,就像它是文檔中的映射結果一樣? – Scorpio我相信這裏的問題可能是缺少數據庫中的外鍵映射。但是,當我在數據庫中創建它們並導出結構時,我看不到引用外鍵約束。當我告訴doctrine schema:create --dumpsql時,它轉儲的SQL也沒有提到外鍵約束。我認爲我看到了問題,但仍然對修復感到困惑! –