CakePHPでLEFT JOIN(テーブル作成〜view表示まで)

findの引数にLEFT JOINを指定して複数テーブルの紐付けを
したときのメモ。

userテーブルのfruitカラム「Orange」を
commentsテーブルのnameカラム「Orange」と
紐付けて取得。

■usersテーブルの作成


— テーブルの構造 `users`

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL,
  `created` date NOT NULL,
  `modified` date NOT NULL,
  `name` varchar(11) NOT NULL,
  `fruit` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


— テーブルのデータをダンプしています `users`

INSERT INTO `users` (`id`, `created`, `modified`, `name`, `fruit`) VALUES
(1, ‘2010-07-19’, ‘2010-07-19’, ‘Tarou’, ‘Orange’);

■commentsテーブルの作成


— テーブルの構造 `comments`

CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(11) NOT NULL,
  `created` date NOT NULL,
  `modified` date NOT NULL,
  `user_id` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `name` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


— テーブルのデータをダンプしています `comments`

INSERT INTO `comments` (`id`, `created`, `modified`, `user_id`, `status`, `name`) VALUES
(1, ‘2010-07-19’, ‘2010-07-19’, 1, 1, ‘Orange’),
(2, ‘2010-07-18’, ‘2010-07-18’, 1, 2, ‘Apple’),
(3, ‘2010-07-20’, ‘2010-07-20’, 2, 1, ‘Orange’);

■users.phpモデルの作成

class User extends AppModel {
    var $name = ‘User’;
}

?>

■comments.phpモデルの作成

class Comment extends AppModel {
    var $name = ‘Comment’;
}

?>

■users_controller.phpコントローラの作成
※コメントアウトは自分のメモ用にわざとつけてあります。

class UsersController extends AppController {

    var $name = ‘Users’;
    var $uses = array(‘User’,’Comment’);

    function index() {

        $options[‘joins’] = array(
            array(
                //’table’ => ‘comments’,
                //’alias’ => ‘Comment’,
                ‘table’ => ‘users’,
                ‘alias’ => ‘User’,
                ‘type’ => ‘LEFT’,
                ‘conditions’ => array(
                    //’User.id = Comment.user_id’,
                    ‘User.fruit = Comment.name’,

                )
            )
        );

        $options[‘conditions’] = array(
            //’Comment.user_id’ => 1
            //’User.id’ => 1
            ‘User.fruit’ => ‘Orange’
        );

        //$this->set(‘users’, $this->User->find(‘all’, $options));
        $this->set(‘users’, $this->Comment->find(‘all’, $options));

    }
}

?>

■users/index.ctpビューの作成

var_dump($users);

?>

CakePHPでキャッシュできない(cacheフォルダ、日本語アクション名)

core.phpで

Configure::write(‘Cache.disable’, false);
Configure::write(‘Cache.check’, true);

にして、controller.phpの「extends AppController {」直下に

var $helpers = array(‘Html’, ‘Cache’);
var $cacheAction = “1 hour”;

とやっていたが、フッターに表示されるdebugを見るとMySQLがSELECTしてるから
キャッシュされてないと思って調べてみると、誤って /app/tmp/cache/配下を
すべて削除してしまっていたことが原因だった。ファイルをもとに戻すと、
/app/tmp/cache/views/ にちゃんとキャッシュされたファイルが生成できた。

また、日本語のアクション名を使っていたところ、キャッシュファイル生成時に
文字化けが起きてしまい、こちらもうまくいかなかった。すべて英語に変えることでOK。

Error: Missing Database Table ‘ファイル名’ for model ‘テーブル名’

vendors の shells に新しくファイルを設置して動かしたところ、

「Error: Missing Database Table ‘ファイル名’ for model ‘テーブル名’」

のエラーが出た。

/app/tmp/cache/models/ 配下をすべて削除したら解決した。

■参考サイト
 CakePHP で何故か Missing Database Table とプルダウン

Google Analytics で外部リンク測定(2010年7月現在)

pageTracker._trackPageview関数を使っていたのだが、
「javascript:pageTracker._trackPageview();」と
FireFoxで実行したら「pageTracker is not defined」と
表示されるため、調べてみたら _gaq.push関数 を
使えとのこと。
※Google Analyticsの解析用コードが最新verの必要あり。

■参考サイト
Google Analytics(非同期型)で、外部リンクをトラッキングする方法

Google の無料広告配信システム DFPスタンダード

Google が無料で公開している広告配信システム
DoubleClick for Publishers(DFP)スタンダード
※月間9000万以下の広告表示に限る

DFPスタンダードの登録には、 Google AdSense を事前に登録
している必要がある。

実際に使ってみると、分からないことが多いうえに、
サイト上にも情報が少ないため、難しかったが、
ヘルプページが一番分かりやすかった。

DFP スタンダード › ヘルプ記事 › スタート ガイド

下記の順で広告作成~配信を行う。
 1.在庫 – 広告ユニット作成
 2.在庫 – プレスーメント作成
 3.オーダー – 広告申込情報の作成
 4.オーダー – 広告クリエイティブのアップロード
 5.在庫 – タグの作成
 6.タグを広告掲載ページに貼り付ける

広告クリティブのアップロードで、純広告を作ったり、
空き枠としてフィラーを回すなど色々できる。
大手企業も使っている定番のシステム。