Blogブログ

Category: memo

Cakephp : HABTM アソシエーションでのupdateAll

状況としては、UserモデルとStudentモデルがある。Userは複数のStudentを持つ。 さらに、Studentは複数のCourseを持つ。Courseは重複するのでHABTM Associationとして登録。 Studentは各コース毎に受講しているか休学してるかstatusで管理する。status = 1 -> 受講中 、status = 0 -> 休学とする。 受講、休学はこんなボタンを表示させて、それぞれ studentsコントローラのadmin_couse_take()で処理を行う。 ちなみに、コントローラ内のファンクションにこうやって複数引数を渡せることも知った。 // absent echo $this->Form->postLink(__(‘Absent’), array( ‘controller’ => ‘students’, ‘action’ => ‘couse_take’, $student[‘Student’][‘id’], $course[‘CoursesStudent’][‘id’], false, ‘admin’ => true ), null, __(‘Are you sure you want to retake the class?’)); // take echo $this->Form->postLink(__(‘Take’), array( ‘controller’ => ‘students’, ‘action’ => ‘couse_take’, $student[‘Student’][‘id’], $course[‘CoursesStudent’][‘id’], […]

cakephp image uplpoad 2

別テーブルで画像を管理、例えばuserとimagesテーブルで分けたい場合。 まずはimagesテーブルを作る。 CREATE table images ( `id` int(10) unsigned NOT NULL auto_increment, `model` varchar(20) NOT NULL, `user_id` int(11) NOT NULL, `name` varchar(32) NOT NULL, `image` varchar(255) NOT NULL, `dir` varchar(255) DEFAULT NULL, `type` varchar(255) DEFAULT NULL, `size` int(11) DEFAULT 0, `active` tinyint(1) DEFAULT 1, PRIMARY KEY (`id`) ); Image でactsAsを宣言。belongsToでユーザとのリレーションを構築。 imagesテーブルのuser_idで紐付けたいので、foreingkeyはuser_idで。 画像格納パスは画像ID毎になる。(webroot/files/thumb/image_id/xxxx.jpgのようなかんじ) ‘pathMethod’をflatにすれば、全ての画像は’path’のディレクトリ配下に一括格納。 public $actsAs […]

cakePHP: image upload

Uploadプラグインの中でも評価の高かった、 https://github.com/josegonzalez/cakephp-upload これを実装してみたのでメモ。 オプションも多く、使いやすそう。 今回使ったのは、以下のオプション。 ‘path’ => ‘{ROOT}webroot{DS}files{DS}thumb{DS}’, ‘fields’ => array( ‘dir’ => ‘image_directry’, ), ‘thumbnailSizes’ => array( ‘xvga’ => ‘1024×768’, ‘vga’ => ‘640×480’, ‘cubic’ => ‘200×200’, ‘thumb’ => ’80×80′ ) ‘path’ 画像の格納パス。この場合はアップロードされた画像はwebroot/files/thumb/~ ‘fields’ 画像名が入るDBフィールド。 ‘thumbnailSizes’ thumbnailSizeを使っうとそれぞれのサイズが{size-name}_file_name で生成。 サイズ指定のオプションは以下。 100×80 – アスペクト比を保ち、トリミングを行う [100×80] – 指定したアスペクト比にフィットさせる 100w – アスペクト比を保ち、幅100px 80h – アスペクト比を保ち、縦80px その他にも、画像のサイズの最大・最小値の指定やパーミッション、上書きの可否等も指定できるようだ。 また細かいバリデーションをかけてエラーメッセージの指定も可能。 例: public […]

cakephp memo : basic sql

・普通のSQL。アソシエーションがあるテーブルの値も自動で取得出来る。 fields, conditionsでselect, where. public function index(){ $users = $this->User->find(‘all’, array( ‘fields’ => array(‘*’), ‘conditions’ => array(‘group_id =’ => ‘2’), )); $this->set(‘users’, $users); } ・inner joinを使う場合。 public function index(){ $users = $this->User->find(‘all’, array( ‘fields’ => array(‘*’), ‘conditions’ => array(‘group_id =’ => ‘2’),             “joins” => array(                              array(“type” => ‘INNER’,                                    “table” => ‘somethings’,                                    “alias” => ‘Something’,                                    “conditions” […]

CakePHP ログイン判定

ver: cake 2.4.2 ・変数のセット Controller/AppController.php public function beforeFilter() { // add for login check $this->set( ‘loggedIn’, $this->Auth->loggedIn() ); } 例:ヘッダーで判定 if ($loggedIn) { echo ”. $this->Html->link(__(‘Logout’), array(‘controller’ => ‘users’, ‘action’ => ‘logout’)) . “”; } else { echo ”. $this->Html->link(__(‘Login’), array(‘controller’ => ‘users’, ‘action’ => ‘login’)) . “” }