私は2つのテーブル、1つはGrowerProjection、もう1つはCropです。 1つの作物はそれに関連する多くの栽培者予測を有することができる。このプロジェクトには、既に構築された基盤となるデータベースがあり、データベースにはCROP-001という一意のIDがあり、crop_IDという列に格納されています。 GrowerProjectionテーブルにはcrop_IDフィールドもあり、特定の投影が何を話しているかを見ることができます。PHP/Symfony3/Doctrine関連でNULLが返される
これで、Doctrineを使ってエンティティを生成しましたが、今ではこれらのエンティティを結合しようとしています。 ManyToOneアソシエーションを作成しようとすると、常にnull値が返されます。私の質問は次のとおりです。1.何が間違っているのですか。2.将来どのようにこれらの問題をデバッグしますか?
私はスキーマの検証とコンソールからのスキーマの更新を試みましたが、それは効果がないようです。
/**
* 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を使用することを試してみました:
ここGrowerprojectionのエンティティから関連スニップです。 @IDディレクティブの有無にかかわらず試しました。変化なし。 cropは常にnullです。ここ
は作物エンティティの一部である:
/**
* 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));
}
これは、栽培者の突起がcropIdとして作物001を有していることが、生産者の投影を見つけCROP-001のcrop_IDを持つ作物テーブルに作物があります。
行\ Doctrine \ Common \ Util \ Debug :: dump($ myCrop);私は、小枝の中でdump()を実行すると、投影が到着し、データが取り込まれていることもわかりますが、列の作物はnullです。
私はここで間違っていますが、どうすればこの協会を働かせることができますか?これを将来どのようにデバッグすればいいですか?
こんにちは!私はちょうどそれを試み、結果に変化は見られません。私はSymfonyのデバッグバーに気付きましたが、データベースクエリは1つだけでした。 –
それはあまりにもよく聞こえません。私は3つのアイデアが残っています:1.
@ORM\Id
も削除しようとしましたか?マッピングと矛盾している可能性があります。 2.マッピングを変更した後、bin/console cache:clear --no-warmup
でキャッシュをクリーンアップしましたか? 3.ドキュメントにマッピングされた結果のように、データベースにも外部キーマッピングがありますか? – Scorpioここでの問題は、データベース内の外部キーマッピングの欠如かもしれないと思います。しかし、データベースでそれらを作成し、構造をエクスポートしたとき、私は外部キーの制約を参照しません。私がdoctrineにschema:create --dumpsqlと言うとき、ダンプするSQLは、外部キー制約に関しても何も言いません。私は問題を見ると思うが、まだ解決策について混乱している! –