symfony2 Doctrineでインサートするとき。

649 views
Skip to first unread message

hossy

unread,
Sep 30, 2013, 5:00:11 AM9/30/13
to symfony-...@googlegroups.com
ご質問させてください。

symfony2 Doctrineでインサートする時です。
例えば下記のようなuserテーブルがあるとします。


user:
  id:
    type: integer
    id: true
    generator:
      strategy: AUTO
  name:  {type: string(20), nullable: false}
  flg:
    type: integer
    length: 1
    options: {default: 1 }

 $user = new User();
 $user->setName('hoge');
 $em = $this->getDoctrine()->getEntityManager();
 $em->persist($user);
 $em->flush();


上記の用にnameカラムだけ指定して保存したいのですが
未指定のflgカラムにnullが入る為、下記のエラーが発生してしまいます。

 Integrity constraint violation: 1048 Column 'flg' cannot be null 



未指定の場合にnullが自動で指定されないようにするにはどのようにすれば良いのでしょうか。


お手数ではございますがご教授お願い致します。
  






hiromi hishida

unread,
Sep 30, 2013, 5:47:07 AM9/30/13
to symfony-...@googlegroups.com
hossyさん

こんばんは、77webです。

user:
id:
type: integer
id: true
generator:
strategy: AUTO
name: {type: string(20), nullable: false}
flg:
type: integer
length: 1
options: {default: 1 }
nullable: true #←ここ追加

でできると思います。

doctrine1の時はDB側がnot
nullでもdoctrineでsave()するときはあまり気にしなくていいようになってしまっていましたが、Doctrine2ではよりスキーマに素直になっていますね。

2013年9月30日 18:00 hossy <hos...@gmail.com>:
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、symfony-users-...@googlegroups.com
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
-------------------------------
77-WEB(ナナウェブ)
菱田裕美
-------------------------------

hossy

unread,
Sep 30, 2013, 7:13:44 AM9/30/13
to symfony-...@googlegroups.com
77webさん

お返事ありがとうございます。

早速試してみましたがnullが入ってしまって希望するoptions: {default: 1 } では
ありませんでした。

記述しないと行けないのでしょうか。


2013年9月30日月曜日 18時47分07秒 UTC+9 77web:
> このグループから退会し、メールの受信を停止するには、symfony-users-ja+unsubscribe@googlegroups.com

Hidenori GOTO

unread,
Sep 30, 2013, 9:30:35 PM9/30/13
to symfony-...@googlegroups.com
hossyさん

後藤です

Doctrine1ではレコードオブジェクトが完全にDoctrineの管理下(Doctrineのクラスを継承しいろいろ機能が組み込まれている)でしたので、新規レコードオブジェクトの場合でも「どのフィールドが明示的にセットされたのか」を認識することができていましたね。

Doctrine2ではPureなエンティティオブジェクトを用いますが、これは最初はDoctrineのEntityManagerの管理下にはありません。オブジェクトをインスタンス化し値をセットした状態のものをEntityManagerに追加し、永続化指示を出す形ですね。
フィールドの変更検出機能が働くのは、一旦persistした以降のmanagedなエンティティのみになるはずです。

ですので、新規インスタンスのデフォルト値を扱いたい場合は、エンティティクラスのコンストラクタで明示的にセットするか、フィールド定義に明示的に初期値を指定します。

Doctrineのドキュメントでは、以下になります。
4.2.2. How can I add default values to a column?
https://doctrine-orm.readthedocs.org/en/latest/reference/faq.html?highlight=default#how-can-i-add-default-values-to-a-column



---------------------------------------------------------------
後藤秀宣
hideno...@gmail.com
---------------------------------------------------------------


2013年9月30日 20:13 hossy <hos...@gmail.com>:
>> > このグループから退会し、メールの受信を停止するには、symfony-users-...@googlegroups.com
>> > にメールを送信します。
>> > その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>>
>>
>>
>> --
>> -------------------------------
>> 77-WEB(ナナウェブ)
>> 菱田裕美
>> -------------------------------
>
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、symfony-users-...@googlegroups.com

hossy

unread,
Sep 30, 2013, 9:58:54 PM9/30/13
to symfony-...@googlegroups.com
後藤 様

お返事ありがとうございます。

早速、試して見たいと思います。
解りやすいご解説もありがとうございました。

2013年10月1日火曜日 10時30分35秒 UTC+9 hidenorigoto:
>> > このグループから退会し、メールの受信を停止するには、symfony-users-ja+unsubscribe@googlegroups.com
>> > にメールを送信します。
>> > その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>>
>>
>>
>> --
>> -------------------------------
>> 77-WEB(ナナウェブ)
>> 菱田裕美
>> -------------------------------
>
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、symfony-users-ja+unsubscribe@googlegroups.com

hossy

unread,
Sep 30, 2013, 11:59:14 PM9/30/13
to symfony-...@googlegroups.com
後藤 様

「エンティティクラスのコンストラクタで明示的にセット」で望んだ通りの処理ができました。
ありがとうございます。





2013年10月1日火曜日 10時58分54秒 UTC+9 hossy:
Reply all
Reply to author
Forward
0 new messages