バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > 多対一リレーションシップ項目のテキスト入力

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 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型以外のテーブル定義をしているのではないでしょうか?


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ゲスト
投稿日時: 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型のデータはデータベースに登録は出来ませんね。


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ゲスト
投稿日時: 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, [
'required' => true,
'constraints' => [
new Assert\Regex([
'pattern' => "/^\d+$/u",
'message' => 'form_error.numeric_only',
]),
new Assert\Length([
'max' => 6,
]),
],
])


という事は、00001などの頭0付きの数字も許されますけどcodeカラムはinteger型なのがこの場合登録しようとしているデータは文字型ですが良いのですか?


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ゲスト
投稿日時: 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の関係が解ってないんだろう

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は93,749名です
総投稿数は111,095件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2318
5
umebius
2085
6
yuh
1858
7
h_tanaka
1760
8
red
1574
9
mcontact
1469
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
804
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.