どうにかなるBLOG :: CakePHP のモデル関数 findAll
http://dounikanarublog.com/detail/13
http://dounikanarublog.com/detail/13
連想配列で指定
conditions | WHERE句で指定する条件。フィールド名をキーに、検索条件値を値とする連想配列 | array('Table.id'=>$this->data['Table']['id']) |
fields | 取得するフィールド名 | |
recursive | 再帰的に取得する深度 | |
order | 取得順 | |
limit | 取得するレコード数(limit) | |
page | 取得するページ数 |
$data = $this->Table->find('all', array('conditions'=>array('Table.name like'=>"%{$this->data['Table']['name']}%")));とする。
実際のSQL文は
WHERE `Board`.`name` like '%NAMEVALUE%'となる。
不等号の場合は
'Table.name >'とする。
プリペアドステートメント的に「?」を使って記述する。最後の配列の値が順番に「?」に代入される。
$data = $this->Table->find('all', array('conditions'=>array('Table.id between ? and ?'=>array(1,5)));この場合のSQL文は
WHERE `Table`.`id` BETWEEN 1 AND 5となる。
- 複雑なWHERE句の条件式でSELECTする場合には結局SQL文を書いている場合と大差なくなる
find()をよりシンプルにしたメソッド。
WHERE カラム名 = 値で検索する単純なSELECT文の場合はfind()よりもこちらを使う方がシンプルで簡単。
$this->モデル名->findAllByカラム名(検索条件, 取得カラム, 件数, ページ数, 階層)フォームから送られたIDの値で検索するには
$this->モデル名->findAllById($this->data['モデル名']['id'])とする。
deleteAll(削除するレコードの抽出条件の連想配列)find()のconditionsと同じように指定する。
$this->モデル名->deleteAll(array('テーブル名.id between > and ?' => array(1.5)))から生成されるSQL文は
WHERE `テーブル名`.`id` BETWEEN 1 AND 5となる。(IDが1から5のレコードを削除する。)
レコードの追加(INSERT)および更新(UPDATE)は、どちらも
該当データのIDがあればUPDATE、無ければINSERTする。
save(保存データ)にて行う。
該当データのIDがあればUPDATE、無ければINSERTする。
- 左テーブルのレコードと右テーブルのレコードが常に1対1で対応している
public $hasOne = array( 'テーブル名' => array( 'conditions' => 'オプション設定連想配列', 'order' => '並び順', 'dependent' => true/false, 'foreignKey' => 'キーとなるフィールド名' ), ..... );dependent: レコード削除時に結合側のレコードも削除するかどうか(true/false)
foreignKey: 結合キー
- 左テーブルに右テーブルが属する状態(1対多)
public $belongsTo = array( 'テーブル名' => array( 'className' => 'クラス名', 'conditions' => 'オプション設定連想配列', 'order' => '並び順', 'foreignKey' => 'キーとなるフィールド名' ), ..... );foreignKey: 結合キー
- 1対多
public $hasMany = array( 'テーブル名' => array( 'className' => 'クラス名', 'conditions' => 'オプション設定連想配列', 'order' => '並び順', 'dipendent' => true/false, 'limit' => 最大レコード数(0で無制限), 'exclusive' => true/false, 'findQuery' => '', 'foreignKey' => 'キーとなるフィールド名' ), ..... );dependent: レコード削除時に結合側のレコードも削除するかどうか(true/false)
exclusive: 元テーブル側のデータを削除する際に結合側の関連レコードを全て削除するかどうか
foreignKey: 結合キー
- hasOne/ belongsTo / hasManyは結合側のテーブルのforeignKeyとなるフィールド名を「元テーブルのフィールド名_id」とすることでModelへの設定の記述を簡略化できる。
このページへのコメント
hcsChx <a href="http://ecfjhiqmgfgs.com/">ecfjhiqmgfgs</a>, [url=http://tckcojflievj.com/]tckcojflievj[/url], [link=http://kgatgbosaqyl.com/]kgatgbosaqyl[/link], http://rjqfmvzdqpax.com/
uEeG5X <a href="http://hckgarnjteds.com/">hckgarnjteds</a>, [url=http://dsvpoakovcko.com/]dsvpoakovcko[/url], [link=http://eddfnyabrgon.com/]eddfnyabrgon[/link], http://kouxgpvcrtpt.com/