> 管理機能 > $em->flush()でエラー |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
senjyu |
投稿日時: 2017/1/19 16:28
対応状況: −−−
|
新米 登録日: 2016/10/7 居住地: 投稿: 8 |
Re: $em->flush()でエラー 468さん。
色々教えて頂きありがとうございます。大変勉強になりました。 また、何かありましたら、ご指南頂けたらと思います。 |
468 |
投稿日時: 2017/1/18 18:48
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: $em->flush()でエラー >すみません、「自分でdefaultを指定する必要があるのでは」というアドバイスの部分が理解できません。
言葉足らずですみません。 こういった形でSQLでカラムを追加する際、DEFAULTを指定する必要があるのでは無いかと思い、コメントしておりました。 ALTER TABLE `dtb_category` ADD `hogehoge` INT NOT NULL DEFAULT '0'; ただ、Categoryエンティティのhogehogeに何もセットされていない = null でDBに格納されたのだと思いますので、 senjyuさんの対応が正しいかと思います。 create_dateやupdate_dateカラムについては、 DoctrineのEventSubscriberクラスを継承して利用しているようで、 /src/Eccube/Doctrine/EventSubscriber/SaveEventSubscriber 内に色々記述されているようです。
|
senjyu |
投稿日時: 2017/1/18 16:13
対応状況: −−−
|
新米 登録日: 2016/10/7 居住地: 投稿: 8 |
Re: $em->flush()でエラー 468さん、調査及びアドバイスありがとうございます。
つまり、migrationを使ってDBにカラムを追加しないから、正しく動作しないということなのでしょうか? すみません、「自分でdefaultを指定する必要があるのでは」というアドバイスの部分が理解できません。どこかのプログラムに$hogehoge=0というように記載する必要があるということでしょうか? 実は、create_dateやupdate_dateカラムも自動挿入されているんですよねぇ。この辺りの仕組みが判りません。 エラーとしては、以下を記載して回避されました。 $Category->setDelFlg(0);の下に $Category->setHogehoge(0); |
468 |
投稿日時: 2017/1/18 12:37
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: $em->flush()でエラー doctorineのドキュメントページに以下のような記述がありました。
options: (optional) Key-value pairs of options that get passed to the underlying database platform when generating DDL statements. google翻訳 DDL文を生成する際に基になるデータベースプラットフォームに渡されるオプションのキーと値のペア http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping DDL文を生成する際に利用される情報のようですので、 エンティティからDBのテーブルを生成する時に利用されるものではないでしょうか? 自分でデータベースにカラムを追加した場合は、自分でdefaultを指定する必要があるのではないかと思います。 報告いただいた状況からも、データの格納やエンティティの初期値とは関係なさそうですね。
|
senjyu |
投稿日時: 2017/1/18 9:48
対応状況: −−−
|
新米 登録日: 2016/10/7 居住地: 投稿: 8 |
Re: $em->flush()でエラー ご指南頂きありがとうございます。
このような方法でエラーメッセージを取得できるのを知りませんでした。勉強不足のようです。 さっそく、エラーメッセージを確認したところ、 新しく追加したコラムhogehogeにNULLをINSERTしようとしていて、エラーとなっていました。 各テーブルには、del_flgというのが存在すると思いますが、 del_flg: type: smallint nullable: false unsigned: false options: default: '0' と.dcm.ymlに定義されていて、INSERTするとdefaultで'0'が挿入されています。 同様に、Eccube.Entity.Category.dcm.ymlに hogehoge: type: smallint nullable: false unsigned: false options: default: '0' と追記したので、てっきり、INSERTするとdefaultで'0'が挿入されると思いきや、'NULL'が挿入されてしまっています。 この辺りの仕組みが判りません。この辺りもご指南頂けますでしょうか? |
468 |
投稿日時: 2017/1/17 16:59
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: $em->flush()でエラー catchの中で、$e->getMessage()でエラーメッセージを取得する事が出来ると思います。
echo $e->getMessage(); exit; のように記述すれば、エラーメッセージを表示して無理矢理、処理を止める事が出来ると思います。
|
senjyu |
投稿日時: 2017/1/17 16:29
対応状況: −−−
|
新米 登録日: 2016/10/7 居住地: 投稿: 8 |
Re: $em->flush()でエラー 今気づいたのですが、直前のquery?ですが、
$em->createQueryBuilder() ->update('Eccube\Entity\Category', 'c') ->set('c.rank', 'c.rank + 1') ->where('c.rank > :rank') ->setParameter('rank', $rank) ->getQuery() ->execute(); となっていますね〜。 新規登録なのにupdateとなっているが変な気がします。 updateでいいのかよく判らないので、この辺りを調べてみたいと思います。 |
senjyu |
投稿日時: 2017/1/17 16:02
対応状況: 開発中
|
新米 登録日: 2016/10/7 居住地: 投稿: 8 |
$em->flush()でエラー お世話になります。どうかお助け下さい。
eccube-3.0.10にてwindowsのxampp上にて開発を行なっております。 管理画面にて新規にカテゴリを追加しようとしたところ、エラーメッセージが表示されてしまいました。 原因を調査してみると、\src\Eccube\Repository\CategoryRepository.php内のsave()で、$em->flush()を実行した部分で、 } catch (\Exception $e) { $em->getConnection()->rollback(); return false; } へ遷移して、falseをreturnしていました。 確かに開発のため、DBのdtb_categoryなどに手を加えているので、エラーが発生してしまうのでしょうけれど、CategoryRepository.phpのsave()には手を加えていませんので、理由が分かりません。 どのようにすれば、エラーの理由を調べることができますか? |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |