[Site] ユーザーIDをユーザー名に変更

タグ :

作成サイト「koweboo」についてまとめるシリーズです。
サイトを作成中、一覧などを表示する際に「ユーザーID」の箇所を「ユーザー名」に変更させるのに、ちと苦労したのでまとめておきます。

通常、IDを名前に変更する場合、ユーザーテーブル内に名前が入っていれば、変更は容易です。
配列の要素名[‘id’]を[‘name’]に変更するだけです。

ですが、今回作成したユーザーテーブル内にはユーザー名のフィールドは設けておらず、別テーブルへ保存させています。
(ユーザー名は任意に変更が可能なデータとしたいので、セキュリティにも高くなりがちなユーザーテーブルとは別のテーブルとしています。)

詳細については過去記事「[Site] ユーザー登録機能」を参照ください。

方法

Bake で生成した状態での index 表示は、当然ながらユーザーIDが表示されます。

cake_user_name_1

方法としては、コントローラにてユーザー情報を取得し、取得したユーザー名をお題IDに対応させるようにします。

ユーザー名の取得方法ですが、配列の要素番号にユーザーIDを、中身にユーザー名が入るようにします。
つまり以下のようなデータを取得するようにします。

array(
 (int) ユーザーID1 => ‘ユーザー名1’,
 (int) ユーザーID2 => ‘ユーザー名2’,
 (int) ユーザーID3 => ‘ユーザー名3’,
 …
)

取得処理のコードは以下になります。

// ユーザー情報取得
$this->User->recursive = 0;
$this->set('users', $this->paginate());
// ユーザーIDリスト取得
$user_id = $this->find('list', array(
	'conditions' => $id,
	'fields' => 'id'
));
// ユーザー名取得
$model->contain('Name');
$users = $model->find('all', array(
	'conditions' => array('User.id' => $user_id),
	'fields' => 'id'
));
foreach($users as $user) {
	$data[$user['User']['id']] = array(
		'id' => $user['Name'][0]['user_id'],
		'name' => $user['Name'][0]['name']
	);
}
$this->set('name', $data);

ビュー内の表示箇所も以下のように変更します。

<?php echo h($name[$user['User']['id']]['name']); ?>

これでソートにも対応したユーザー名表示が可能となりました。

cake_user_name_2

このような配列要素番号を「ID」として格納しておくやり方はこの後もよく使用する方法です。
上記のやり方よりも簡単に取得できる方法があるのかもしれませんが、汎用性や使用性などを考えても、今のところベストだと思っています。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed