🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Doctrine2

Doctrine 2.0はPHP(5.3.2+)のORMです。Doctrine1.2はActive Recordのパターンを使っているのに対し、Doctrine 2はData Mapperパターンを使います。Doctrineのプロジェクトはデータベースの抽象性とPHPで書かれたORMを扱うためのオープンソースのライブラリとツールの集合です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Q&A

解決済

2回答

1291閲覧

Symfony OneToOneリレーションでのエラー Integrity constraint violation: 1048 Column 'my_event_id' cannot be null

yushi.s

総合スコア8

Doctrine2

Doctrine 2.0はPHP(5.3.2+)のORMです。Doctrine1.2はActive Recordのパターンを使っているのに対し、Doctrine 2はData Mapperパターンを使います。Doctrineのプロジェクトはデータベースの抽象性とPHPで書かれたORMを扱うためのオープンソースのライブラリとツールの集合です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

0グッド

0クリップ

投稿2019/09/16 12:46

編集2019/09/16 12:55

MyEventエンティティとMyEventScheduleエンティティをOneToOenの関係で持たせています。
MyEventを作成する時に同じフォームから一緒にスケジュールも作成したいのですが、うまくできません。

php

1# マイイベントエンティティ 2 3/** 4 * @ORM\Entity(repositoryClass="App\Repository\MyEventRepository") 5 * @ORM\HasLifecycleCallbacks 6 */ 7class MyEvent 8{ 9 /** 10 * @ORM\Id() 11 * @ORM\GeneratedValue() 12 * @ORM\Column(type="integer") 13 */ 14 private $id; 15 16 /** 17 * @ORM\OneToOne(targetEntity="App\Entity\MyEventSchedule", cascade={"persist", "remove"}) 18 */ 19 private $myEventSchedule; 20 21 public function getId(): ?int 22 { 23 return $this->id; 24 } 25 26 public function getMyEventSchedule(): ?MyEventSchedule 27 { 28 return $this->myEventSchedule; 29 } 30 31 public function setMyEventSchedule(?MyEventSchedule $myEventSchedule): self 32 { 33 $this->myEventSchedule = $myEventSchedule; 34 35 return $this; 36 } 37 38}

php

1# マイイベントスケジュールエンティティ 2 3/** 4 * @ORM\Entity(repositoryClass="App\Repository\MyEventScheduleRepository") 5 * @ORM\HasLifecycleCallbacks 6 */ 7class MyEventSchedule 8{ 9 /** 10 * @ORM\Id() 11 * @ORM\GeneratedValue() 12 * @ORM\Column(type="integer") 13 */ 14 private $id; 15 16 /** 17 * @ORM\OneToOne(targetEntity="App\Entity\MyEvent", cascade={"persist", "remove"}) 18 * @ORM\JoinColumn(nullable=false) 19 */ 20 private $myEvent; 21 22 public function getId(): ?int 23 { 24 return $this->id; 25 } 26 27 public function getMyEvent(): ?MyEvent 28 { 29 return $this->myEvent; 30 } 31 32 public function setMyEvent(MyEvent $myEvent): self 33 { 34 $this->myEvent = $myEvent; 35 36 return $this; 37 } 38}

php

1class MyEventType extends AbstractType 2{ 3 public function buildForm(FormBuilderInterface $builder, array $options) 4 { 5 $builder 6 ->add('myEventSchedule', MyEventScheduleType::class, [ 7 'required' => true, 8 ]) 9 ; 10 } 11 12 /** 13 * {@inheritdoc} 14 */ 15 public function configureOptions(OptionsResolver $resolver): void 16 { 17 $resolver->setDefaults([ 18 'data_class' => MyEvent::class, 19 ]); 20 } 21}

php

1/** 2 * @Route("admin/my/event") 3 */ 4class MyEventController extends AbstractController 5{ 6 7 /** 8 * @Route("/new", name="admin_my_event_new", methods={"GET","POST"}) 9 */ 10 public function new(Request $request): Response 11 { 12 $myEvent = new MyEvent(); 13 14 $form = $this->createForm(MyEventType::class, $myEvent); 15 $form->handleRequest($request); 16 17 18 if ($form->isSubmitted() && $form->isValid()) { 19 $entityManager = $this->getDoctrine()->getManager(); 20 $entityManager->persist($myEvent); 21 $entityManager->flush(); 22 23 $this->addFlash('success', 'イベントを登録しました'); 24 25 return $this->redirectToRoute('admin_my_event_index'); 26 } 27 28 return $this->render('admin/my_event/new.html.twig', [ 29 'my_event' => $myEvent, 30 'form' => $form->createView(), 31 ]); 32 } 33

コントローラーにスケージュールの保存処理を書く必要があるのでしょうか?
また、フォームが間違っているのでしょうか?
どなたか教えていただけないしょうか?

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

relationのannotationが違っていて書き直したらうまく動きました。

投稿2019/09/17 15:38

yushi.s

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

テーブル定義と実際にどのような情報を登録しようとしているのか分からないので一概に言えないのですが、エラーからすると

Column 'my_event_id' cannot be null

my_event_idカラムはnullにできない

とのことなので、save時にmy_event_idというカラムに何かしら値をセットしてあげる必要があるのではないでしょうか。

投稿2019/09/16 20:33

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yushi.s

2019/09/17 01:15 編集

コメントありがとうございます。 実際にはイベントテーブルにはイベント情報(イベント名や画像などの情報)を入れたくて、スケジュールにはイベントの日程(detatime)を入れたいと思っています。 やりたいことはイベント登録のフォームでスケジュールも一緒に登録したいのですが、スケジュール側のテーブルのmy_event_idに値をうまく入れれなくて困っています。 myEventContollerでnew スケジュール()してそこイベントエンティティをセットしてもnullになってしまって、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問