ちょっと説明しにくい問題がありますが、とにかくやってみます。
私のMatchesResultscontrollerでは、エンティティを構築するために次のコードを持っています:
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
if($this->getRequest()->isPost()) {
// get id of current match
$match_id = (int)$this->params()->fromRoute('match', 1);
// find match based on current match id
$results = $em->getRepository('Competitions\Entity\MatchesResults')->findBy(
['match_id' => $match_id]
);
$matchresults = new \Competitions\Entity\MatchesResults();
// Input
$matchresults->stek = $this->getRequest()->getPost('Res_Stek');
$matchresults->member_id = $this->getRequest()->getPost('Res_Name');
$matchresults->weight = $this->getRequest()->getPost('Res_Gewicht');
$matchresults->points = $this->getRequest()->getPost('Res_Punten');
$matchresults->match_id = $match_id;
$matchresults->amount = $this->getRequest()->getPost('Res_Aantal');
// Add
$em->persist($matchresults);
$em->flush($matchresults);
// Redirect back to the competition overview
return $this->redirect()->toRoute('admin-match');
ファイル MatchesResults.php は次のようになります
<?php
namespace Competitions\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
@ORM\Table()
@ORM\Entity
@ORM\Table(name="matches_results")
*/
class MatchesResults {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
public $id;
/** @ORM\Column(type="integer") */
public $match_id;
/** @ORM\Column(type="integer") */
public $member_id;
/** @ORM\Column(type="integer") */
public $stek;
/** @ORM\Column(type="integer") */
public $weight;
/** @ORM\Column(type="integer") */
public $amount;
/** @ORM\Column(type="float") */
public $points;
/** @ORM\Column(type="integer") */
public $position;
public $var;
/**
* @ORM\OneToMany(targetEntity="Competitions\Entity\Matches", mappedBy="Members")
* @ORM\JoinColumn(name="match_id", referencedColumnName="id")
*/
public $result;
public function getResult() {
return $this->result;
}
/**
* @ORM\OneToOne(targetEntity="Members\Entity\Members")
* @ORM\JoinColumn(name="member_id", referencedColumnName="user_id") <----- problem here
*/
public $member;
public function getMember() {
return $this->member;
}
}
特定の試合のすべての結果の概要を取得する必要がある場合、その結果にリンクされた正しいユーザーを使用すると、完全に機能します。ただし、新しい結果を追加する必要がある場合、doctrine は存在しない結果の member_id を取得しようとしているため、member_id = null を取得します。
$matchresults->stek = $this->getRequest()->getPost('Res_Stek');
$matchresults->member_id = $this->getRequest()->getPost('Res_Name');
$matchresults->weight = $this->getRequest()->getPost('Res_Gewicht');
$matchresults->points = $this->getRequest()->getPost('Res_Punten');
$matchresults->match_id = $match_id;
$matchresults->amount = $this->getRequest()->getPost('Res_Aantal');
このコードはすべての値をエンティティに正しく設定しますが、エンティティの member_id フィールドは上書きされるだけです。どうすればこの問題を解決できますか? 問題のある行を含まない別のファイルを作成することもできますが、それは非常にエレガントな解決策ではないと思います。
マーク