バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 会員登録で項目を追加したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
masaru
投稿日時: 2021/10/30 2:33
対応状況: −−−
半人前
登録日: 2009/7/7
居住地:
投稿: 18
会員登録で項目を追加したい
▼テンプレート
[EC-CUBE] 4.1.0
[レンタルサーバ] さくらのインターネット
[OS] CentOS Linux release 7.9.2009
[PHP] Version 7.4.20
[データベース] MySQL 5.7.34
[WEBサーバ] Apache/2.4.6
[導入プラグインの有無] 無
[カスタマイズの有無] 有
会員登録で項目(部署)を追加したくて行き詰まっています。

src/Eccube/Form/Type/Admin/CustomerType.php


/** 部署名を追加する **/
->add('department_name', TextType::class, [
'required' => false,
'constraints' => [
new Assert\Length([
'max' => $this->eccubeConfig['eccube_stext_len'],
]),
],
])

src/Eccube/Entity/Customer.php

/**
* @var string|null
*
* @ORM\Column(name="department_name", type="string", length=255, nullable=true)
*/
private $department_name;

/** 部署名
* Set departmentName.
*
* @param string|null $departmentName
*
* @return Customer
*/
public function setDepartmentName($departmentName = null)
{
$this->department_name = $departmentName;

return $this;
}

/**
* Get departmentName.
*
* @return string|null
*/
public function getDepartmentName()
{
return $this->department_name;
}

を追加し、

src/Eccube/Resource/template/admin/Customer/edit.twig


{# 部署名を追加する #}
<div class="row mb-2">
<div class="col-3">
{# <span>{{ 'admin.common.department_name'|trans }}</span> \
#}
<span>{{ '部署名'|trans }}</span>
</div>
<div class="col">
{{ form_widget(form.department_name) }}
{{ form_errors(form.department_name) }}
</div>
</div>
を追加。

データベースのdtb_order、dtb_shippingテーブルに

ALTER TABLE dtb_order add department_name varchar(255) NULL;

ALTER TABLE dtb_shipping add department_name varchar(255) NULL;

でdepartment_nameを追加しました。

これで会員登録画面 customer/newに部署名[   ]が追加されましたが、実際に何か入れて登録ボタンを押すと

An exception occurred while executing 'SELECT t0.id AS id_1, t0.name01 AS name01_2, t0.name02 AS name02_3, t0.kana01 AS kana01_4, t0.kana02 AS kana02_5, t0.company_name AS company_name_6, t0.department_name AS department_name_7, t0.postal_code AS postal_code_8, t0.addr01 AS addr01_9, t0.addr02 AS addr02_10, t0.email AS email_11, t0.phone_number AS phone_number_12, t0.birth AS birth_13, t0.password AS password_14, t0.salt AS salt_15, t0.secret_key AS secret_key_16, t0.first_buy_date AS first_buy_date_17, t0.last_buy_date AS last_buy_date_18, t0.buy_times AS buy_times_19, t0.buy_total AS buy_total_20, t0.note AS note_21, t0.reset_key AS reset_key_22, t0.reset_expire AS reset_expire_23, t0.point AS point_24, t0.create_date AS create_date_25, t0.update_date AS update_date_26, t0.customer_status_id AS customer_status_id_27, t0.sex_id AS sex_id_28, t0.job_id AS job_id_29, t0.country_id AS country_id_30, t0.pref_id AS pref_id_31, t0.discriminator_type FROM dtb_customer t0 WHERE t0.email = ? AND t0.customer_status_id IN (?, ?) AND t0.discriminator_type IN ('customer')' with params ["masaru@erde.co.jp";, 1, 2]:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.department_name' in 'field list'

と出てしまいます。
SQL文でdepartment_nameに関する記述が無いのが原因だと思いますが、これがどのファイルを修正すればいいのか見当が付きません。
ec9iii
投稿日時: 2021/10/30 10:45
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 会員登録で項目を追加したい
Entity追加後、コマンドからProxyクラスの生成~定義をデータベースに反映する手順は行われておりますでしょうか?
(以下のドキュメントが参考になるかと思います)

https://doc4.ec-cube.net/customize_entity
masaru
投稿日時: 2021/10/30 18:47
対応状況: −−−
半人前
登録日: 2009/7/7
居住地:
投稿: 18
Re: 会員登録で項目を追加したい
御教示いただいたサイトの記事を参考に

OrderTrait.php

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;

/**
* @EntityExtension("Eccube\Entity\Order")
*/
trait OrderTrait
{
/**
* @ORM\Column(type="string", nullable=true)
*/
public $department_name;
}

というファイルを作成し、
../../../bin/console eccube:generate:proxies
を実行し、
../../../bin/console cache:clear --no-warmup
をやったら
PHP Fatal error: Eccube\Entity\Order and Customize\Entity\OrderTrait define the same property ($department_name) in the composition of Eccube\Entity\Order. However, the definition differs and is considered incompatible. Class was composed in /var/www/html/eccube/app/proxy/entity/src/Eccube/Entity/Order.php on line 42
In Order.php line 42:
Compile Error: Eccube\Entity\Order and Customize\Entity\OrderTrait define the same property ($department_name) in the composition of ccube\Entity\Order. However, the definition differs and is considered incompatible. Class was composed

となってしまいました。

src/Eccube/Entity/Order.php


/**
* @var string|null
*
* @ORM\Column(name="department_name", type="string", length=255, nullable=true)
*/
private $department_name;
/**

の記述があるのが重複しているということでしょうか。
ec9iii
投稿日時: 2021/11/1 10:03
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 会員登録で項目を追加したい
そうですね。。重複していることが原因だと思われます。
SQLエラーの原因がコマンド実行していないことではないかなと思いましたので、
まずはもともとのsrcへのカスタマイズのみでコマンド実行してみるところからお試しいただくのが良さそうかな、と思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.