質問 > その他 > 多対一リレーションシップ項目のテキスト入力 |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 2023/8/19 13:04
対応状況: −−−
|
多対一リレーションシップ項目のテキスト入力 [EC-CUBE]4.2.1
[OS] Windows10 [PHP] 7.4 [データベース] PostgreSQL 14.3 [WEBサーバ] apache [ブラウザ] Chrome まだ初めて3週間程度のひよっこです。 多対一リレーションシップの項目 /** * @var \Customize\Entity\table1 * * @ORM\ManyToOne(targetEntity="Customize\Entity\table2") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="table2_code", referencedColumnName="code") * }) */ private table2_code; /** * Set table2_code. * * @param \Customize\Entity\table2|null $table2_code * * @return table1 */ public function setTable2Code(table2 $table2_code = null) { $this->table2_code = $table2_code; return $this; } /** * Get table2_code. * * @return \Customize\Entity\table2|null */ public function getTable2Code() { return $this->table2_code; } tbl1.table2_code → tbl2.codeのtable2_codeをテキスト入力したいのですが、 ->add('table2_code', TextType::class, [ 'required' => true, 'constraints' => [ new Assert\Regex([ 'pattern' => "/^\d+$/u", 'message' => 'form_error.numeric_only', ]), new Assert\Length([ 'max' => 6, ]), ], ]) FORMをTextTypeで作成するとエラーで画面が表示されませんでした。 色々調べてSymfony の「Data Transformers」に行きついて試したところ 画面は表示されるのですが登録するとValidationのconstraintsで引っかかるようで 項目の下に「型はStringでなければいけません。」がエラーが2つ出ます。 'required' => true のみで登録した場合は登録はされましたが、 数値以外の項目を入力するとSQLエラーで弾かれます(これは正常なエラー)。 探し方が悪いのかそもそもやり方が間違っているのか、 対処法もわからずどうすれば良いのか途方に暮れております。 わかる方がいればお教えいただけると幸いです。 |
|
mcontact |
投稿日時: 2023/8/19 19:18
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1469 |
Re: 多対一リレーションシップ項目のテキスト入力 Customize\Entity\table2側のEntityファイルの記述がないので、詳しい事は言えませんが、Customize\Entity\table2側がString型以外のテーブル定義をしているのではないでしょうか?
|
ゲスト |
投稿日時: 2023/8/19 20:05
対応状況: −−−
|
Re: 多対一リレーションシップ項目のテキスト入力 ご返事ありがとうございます。
Customize\Entity\table2側のEntityファイルを抜粋すると /** * @var int * * @ORM\Column(name="code", type="integer", options={"unsigned":true}) * @ORM\Id */ private $code; /** * @var string|null * * @ORM\Column(name="name", type="string", length=255, nullable=true) */ private $name; /** * Set code. * * @param int|null $code * * @return table2 */ public function setCode($code = null) { $this->code = $code; return $this; } /** * Get code. * * @return int */ public function getCode() { return $this->code; } /** * Set name. * * @param string|null $name * * @return table2 */ public function setName($name = null) { $this->name = $name; return $this; } /** * Get name. * * @return string|null */ public function getName() { return $this->name; } 上記のような普通のテーブルで項目は少し追加する感じです。 SetGet以外のコードは特に記述してません。 データが多くプルダウンでは長すぎるため codeを入力して名前は補完するよくあるUIなのですが、 EC-CUBEではこの設定だとcodeをテキスト入力するのは無理なのでしょうか? |
|
mcontact |
投稿日時: 2023/8/21 10:17
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1469 |
Re: 多対一リレーションシップ項目のテキスト入力 > EC-CUBEではこの設定だとcodeをテキスト入力するのは無理なのでしょうか?
普通に、EC-CUBEというよりプログラムにデータ型がある事を知らない様なので... codeカラムは、integer型の指定になっているので普通にstring型のデータはデータベースに登録は出来ませんね。
|
ゲスト |
投稿日時: 2023/8/21 13:00
対応状況: −−−
|
Re: 多対一リレーションシップ項目のテキスト入力 ご返事ありがとうございます。
> 普通に、EC-CUBEというよりプログラムにデータ型がある事を知らない様なので... > codeカラムは、integer型の指定になっているので普通にstring型のデータはデータベースに登録は出来ませんね。 PHPのコーディング自体は30年位やってるの普通にフルスクラッチで書けばすぐできるのですが... EC-CUBE4もそうですがフレームワーク自体が初めてでもどかしい思いをしております。 説明が下手でどうもこちらの意図が伝わっていないようで申し訳ない。 単純にリレーションシップ設定してあるID項目をテキスト入力するには、 EC-CUBE4(symfony)ではどうすれば良いのでしょうか? |
|
mcontact |
投稿日時: 2023/8/22 9:43
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1469 |
Re: 多対一リレーションシップ項目のテキスト入力 引用:
->add('table2_code', TextType::class, [ という事は、00001などの頭0付きの数字も許されますけどcodeカラムはinteger型なのがこの場合登録しようとしているデータは文字型ですが良いのですか?
|
ゲスト |
投稿日時: 2023/8/22 20:59
対応状況: −−−
|
Re: 多対一リレーションシップ項目のテキスト入力 00001などの頭0付きの数字の場合
table1.table2_codeとtable2.codeはどらもinteger型ですので 双方ともに1で登録されるはずです。 登録できJoinする項目として機能し問題ないと思います。 単独のinteger型項目をTextType::classでフォーム生成した場合も1で登録されました。 単独との違いはJoinしてる方はconstraintsで設定しているバリデーションで型エラーになります。 これが実は何か関数なり手順なり用意されていてスムーズに通るようになるのか? それとも自力でコーディングでなんとかしなければならないのか? というのが知りたいのです。 前者だと楽で良いのですが... EC-CUBEというよりsymfonyの問題のようですね。 |
|
ゲスト |
投稿日時: 2023/8/25 19:08
対応状況: −−−
|
Re: 多対一リレーションシップ項目のテキスト入力 頭0付き数字が数字で登録されるのは、DBがうまい感じにしているだけで30年もphp使っているわりにphpとDBの関係が解ってないんだろう
|
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |