コントローラーアクションに次のコードがあります。
public function someAction()
{
// ...
$promo_repo = $em->getRepository('AcmeContactlistBundle:Promotion');
$default_promo_code = $this->container->getParameter('promo_default_code');
$promo = $promo_repo->findOneByCode($default_promo_code);
if (empty($promo)) {
$promo = new Promotion();
$promo->setCode($default_promo_code);
$start_date = $this->container->getParameter('promo_default_start_date');
$expiry_date = $this->container->getParameter('promo_default_end_date');
$promo->setStartsAt(new \DateTime($start_date));
$promo->setExpiresAt(new \DateTime($expiry_date));
$em->persist($promo);
$em->flush();
}
$contact = new Contact();
$contact->setPromotion($promo); // <- Error here. See error msg below
// Some more code follows ...
}
エラーメッセージ
PHP Catchable 致命的エラー: Acme\ContactlistBundle\Entity\Contact::setPromotion() に渡される引数 1 は、Acme\ContactlistBundle\Entity\Promotion のインスタンスでなければなりません。null を指定すると、...
上記のステートメントによって生成された SQL を確認し、レコードがプロモーション テーブルに保持されていることも確認しました (存在しない場合)。プロモーション オブジェクトが作成され、データベースに正しく保持されているため、それを contact 変数に割り当てるまでに値が null になることを理解できません。
何がうまくいかないのですか?