cakephp2.doc_040
最終投稿日:2019年11月20日
【基本】
ファイル名はキャメル形式
例)
Profile.php
<?php
App::uses('AppModel', 'Model');
class Profile extends AppModel {
public $name = 'Profile';
//CakePHP2.36以降は引数を受け取る
public function beforeSave($options = array()) {
//これがないと、保存がキャンセルされる
return true;
}
}
?>
【テーブルを使用しない】
public $useTable = false;
【Model 内で Session を使用する】
<?php
App::uses('AppModel', 'Model');
//読み込む
App::uses('CakeSession', 'Model/Datasource');
class Hoge extends AppModel {
public $name = 'Hoge';
public $actsAs = array();
//クラス全体で使用したいならココに変数宣言
public $session;
//コンストラクタ
public function __construct(){
//親の処理を実行
parent::__construct();
//オブジェクトを生成
$this->session = new CakeSession();
}
public function hogeCheck(){
//生成したオブジェクトにアクセスできる
var_dump($this->session->read($name));
}
}
?>
【リレーション】
hasOne 1 対 1
hasMany 1 対 多
belongsTo 多 対 1
hasAndBelongsToMany 多 対 多
※Controller 側の recursive の設定で無効にできるので注意!
< hasOne >
public $hasOne=array(
//エイリアス名
"Syumi" => array(
//モデル名
"className"=>"Syumi",
//デフォルト値:小文字モデル + "_id"
"foreignKey"=>"user_id",
"conditions"=>array(),
"fields"=>"",
"order"=>"",
),
);
【注意】
テーブルの JOIN は、定義したモデルの主キーと foreignKey で定義したカラム名で結合します。
つまり、結合元は必ず主キーとなります。
任意のキーと foreignKey を結合したい場合は、以下の様に $primaryKey 変数を変更する必要があります。
public $primaryKey = 'hoge';
ただ、モデルで定義してしまうと永久に主キーが変わってしまって怖いので、
Controller で都度以下の様に変更が良いのかも。
$this->User->recursive = 0;
//一時的に主キーを変更
$this->User->primaryKey = 'account';
$datas = $this->User->find("all",array("conditions"=>array()));
< hasMany >
public $hasMany=array(
//エイリアス名
"Syumi" => array(
//モデル名
"className"=>"Syumi",
//デフォルト値:小文字モデル + "_id"
"foreignKey"=>"user_id",
"conditions"=>array(),
"fields"=>"",
"order"=>"",
),
);
【メモ】
基本的には、hasOne と同じです。
内部的な SQL は、 JOIN ではなく、SQL を複数回実行しています。
< belongsTo >
public $belongsTo=array(
"User" => array(
"className"=>"User",
"foreignKey"=>"user_id",
"conditions"=>array(),
"fields"=>"",
"order"=>"",
),
);
【メモ】
hasMany の逆となります。
こちらは本当に LEFT JOIN します。
< hasAndBelongsToMany >
何か中間モデルを作成する必要があるらしい。
割愛します。