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);

?>

One Reply to “CakePHPでLEFT JOIN(テーブル作成〜view表示まで)”

Comments are closed.