Home > スクリプト > PHP Archive

PHP Archive

[cakephp]テーブル未使用モデルで$this->Model->create()するとエラー吐くよ。

Modelで

var $useTable = false;

という設定をして、

$this->Model->create($this->data);

をすると、

Warning (512): (Model::getColumnType) Unable to locate model field data. If you are using a model without a database table, try implementing schema() [CORE/cake/libs/model/model.php, line 959]
Code | Context
 
$column	=	"how_know"
$cols	=	array()
 
$cols = $this->schema();
if (empty($cols)) {
    trigger_error(__('(Model::getColumnType) Unable to locate model field data. If you are using a model without a database table, try implementing schema()', true), E_USER_WARNING);
 
Model::getColumnType() - CORE/cake/libs/model/model.php, line 959
Model::deconstruct() - CORE/cake/libs/model/model.php, line 857
Model::set() - CORE/cake/libs/model/model.php, line 839
Model::create() - CORE/cake/libs/model/model.php, line 1014
PartnersController::regist() - APP/controllers/partners_controller.php, line 20
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 265
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 237
[main] - APP/webroot/index.php, line 84

というエラーを吐いてきたんですよ。
エラー見ると、

$this->data["Model"]["how_know"]

という要素に格納されている値に問題あるみたいですね。
ちなみに、セレクトボックスと選択したした値(配列)が格納されています。

で、色々と調べてみると、Tableを使ってはいなくても、TableのSchema情報を定義しておけ、と。
つーことでModelを再設定します。

var $useTable = false;
var $_schema = array("how_know"=>array("type"=>"string"));

これでエラーを吐かなくなりました。

[cakephp1.2]validate使用時の注意。[validate]

cakephp1.1の時のように、

$this->yourmodel->validates($this->data);

とすると、cakephp1.2では

(Model::validates) Parameter usage is deprecated, set the $data property instead
Warning (512): [CORE/cake/libs/model/model.php, line 1647]

とWarningを吐きます。1.2では下記のようにしましょう。

if ($this->YourModel->create($this->data) && $this->YourModel->validates()) {
    // validation ok
} else {
    // validation not ok
}

また、新規登録時のvalidateルールを下記の様に設定するとする。

	var $validate = array(
				"name"=>array(
					array("rule"=>VALID_NOT_EMPTY)
				),
				"kana"=>array(
					array("rule"=>VALID_NOT_EMPTY)
				)
			)

でも、データ更新時にはvaidateルールから
「kana」のvalidateルールを除きたい場合は、

unset($this->YourModel->validate['kana']);

と書くよ。

[cakephp]FormHelperから自動出力されるdiv要素を消す方法。

div要素を外したい場合には

$form->submit('登録', array('div'=>false));
$form->input("User/name", array("type"=>"text", "label"=>false, "div"=>false));

こんな感じ。

CakePHPでCronを使う。

<?php
    $_GET['url'] = "crons/vacuum/";
    require_once( dirname( dirname(__FILE__) ) . "/index.php" );
?>

Cronで動かすスクリプトに上記の様にコードを書く。
すると、
http://hogehoge.com/crons/vacuum
と同じ動作をする。

CakePHPでファイルのダウンロードのやり方。

例えば、

$output_file = sprintf(DB_NAME."_%s.db", date("Ymd-hi"));
system("/usr/bin/pg_dump -u ".DB_NAME." < ".AUTH_USER_FILE_PATH." > ".DB_EXPORT_PATH.$output_file);
$this->autoRender = false;
Configure::write('debug', 0);
header("Content-disposition: attachment; filename=".$output_file);
header("Content-type: application/octet-stream; name=".$output_file);
$result = file_get_contents(DB_EXPORT_PATH.$output_file);
print($result);
return;

みたいな。

CakePHP の findAll の条件に IN 演算子を使うには

CakePHP の findAll の条件に IN 演算子を使うには

$this->model->findAll(array('field IN (1,2,3)'));

または、

$params = array(1,2,3);
$this->model->findAll(array('field' => $params));

Home > スクリプト > PHP Archive

Search
Feeds
Meta

Return to page top