cakephp2.doc_040
R e i - D r e a m
for Laravel
TOP > CakePHP2 > CakePHP2 Model関連
Guest
login

最終投稿日:2019年11月20日

目次
○ CakePHP Model関連
[Model]の基本
バリデーション
[バリデーション]の基本やカスタマイズ
トランザクション
[開始][ロールバック][コミット]操作
Behavior
[Behavior]の基本です
Model関連(基本)
CakePHP2.x
【基本】
    ファイル名はキャメル形式
    例)
        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 >
    何か中間モデルを作成する必要があるらしい。
    割愛します。
            
レンズモード 【新規購入限定用】
ログインしてコメントを残そう!!


きっぷる