バージョン選択

フォーラム

メニュー

オンライン状況

61 人のユーザが現在オンラインです。 (53 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 61
もっと...

サイト内検索

 > 管理機能 > $em->flush()でエラー

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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()には手を加えていませんので、理由が分かりません。
どのようにすれば、エラーの理由を調べることができますか?
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でいいのかよく判らないので、この辺りを調べてみたいと思います。
468
投稿日時: 2017/1/17 16:59
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: $em->flush()でエラー
catchの中で、$e->getMessage()でエラーメッセージを取得する事が出来ると思います。

echo $e->getMessage();
exit;

のように記述すれば、エラーメッセージを表示して無理矢理、処理を止める事が出来ると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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/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を指定する必要があるのではないかと思います。
報告いただいた状況からも、データの格納やエンティティの初期値とは関係なさそうですね。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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 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 内に色々記述されているようです。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

senjyu
投稿日時: 2017/1/19 16:28
対応状況: −−−
新米
登録日: 2016/10/7
居住地:
投稿: 8
Re: $em->flush()でエラー
468さん。
色々教えて頂きありがとうございます。大変勉強になりました。
また、何かありましたら、ご指南頂けたらと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,307名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.