私は長い間まっすぐな MySQL を行ってきましたが、現在は ORM の方法で物事を行おうとしています。ユーザーがデザインを作成するサイトがあります。Design テーブルには、User.id にマップされるフィールド「userId」があります。Design エンティティには、エンティティ間の関係を定義する値 $user があります。
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;
これで、Design エンティティを読み込んで、$design->user->lastname でユーザーの姓を取得できるようになりました。
ここで、ユーザーが新しいデザインを作成するとします。次のようにエンティティを保存します。
$design = new Design();
$design->setTitle($_POST['title']);
$design->setUserId($_POST['userId']);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($design);
$em->flush();
これを行うと、null を許可しない userId が null であるというメッセージで失敗します。間違って渡しているのではないかと思いましたが、Design エンティティから $user を削除すると正常に動作するので、次のようにユーザー オブジェクトも渡されることを期待していると思います。
$design->user = new User($userId)
ユーザー全体を取得するためだけにデータベース呼び出しを追加したくありませんが、必要なのは ID だけです。これを処理する最も簡単な方法は何ですか?