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"));
これでエラーを吐かなくなりました。
- Comments: 0
- Trackbacks: 0
[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']);
と書くよ。
- Comments: 0
- Trackbacks: 0
[cakephp]FormHelperから自動出力されるdiv要素を消す方法。
div要素を外したい場合には
$form->submit('登録', array('div'=>false)); $form->input("User/name", array("type"=>"text", "label"=>false, "div"=>false));
こんな感じ。
- Comments: 0
- Trackbacks: 0
CakePHPでCronを使う。
<?php $_GET['url'] = "crons/vacuum/"; require_once( dirname( dirname(__FILE__) ) . "/index.php" ); ?>
Cronで動かすスクリプトに上記の様にコードを書く。
すると、
http://hogehoge.com/crons/vacuum
と同じ動作をする。
- Comments: 0
- Trackbacks: 0
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;
みたいな。
- Comments: 0
- Trackbacks: 0
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));
- Comments: 0
- Trackbacks: 0
- Search
- Feeds
- Meta