カテゴリー
コンピューター

CakePHP2 で ACL のテーブルにも配慮して コントローラーから大量データを直接 DB に挿入する方法

テストデータを一括で大量に登録するとき、どうされますか?はい、そのとおりです。データベースに INSERT 文で直接データを投入しますね。

ですが、CakePHP2 で ACL を使っていると、それができない!というテーブルがあることがわかります。はい、そのとおりです。users テーブルですね。

ACL のテーブル、aros と users テーブルが密接にかかわっているため、INSERT で users へのみデータを挿入することができないのです。詳しくは次のページです。

となりますと、ウェブの画面から一つ一つ登録するしかないのか、、、と思いますが、100や200のときはとてもではありませんが、無理です。

そこで、コントローラーに大量にデータを書いて登録する方法を考えました。次のようになります。

app/Controller/UsersController.php

<?php
App::uses('AppController', 'Controller');
/**
 * Users Controller
 *
 * @property User $User
 */
class AddUsersController extends AppController {

	public $uses = array('User');

	function beforeFilter() {
		$this->Auth->allow();
	}

	public function index() {

		$array = array(
				array('User' => array('username' => 'sample1', 'password' => 'sample1', 'group_id' => 1, ), ),
				array('User' => array('username' => 'sample2', 'password' => 'sample2', 'group_id' => 1, ), ),
		);

		foreach ($array as $value) {
			$this->User->create();
			if ($this->User->save($value)) {
				pr('成功 ' . $value['User']['username']);
			} else {
				pr('失敗 ' . $value['User']['username']);
			}
		}

		exit;
	}
}

ハイライトした部分が繰り返しになります。エクセルなどで、フォーマットを作っておいてサクラエディタなどで整形すればすぐに完成します。次のページのイメージです。

エクセル → サクラエディタ → CakePHP とひと手間かかりますけれども、自分で使うだけであればこれで充分だと思うのです。

コメントを残す