Pocket
LINEで送る

postsとtagsはHABTMであるときに、tag_idの1か2をもつpostのみを抽出する場合、postsにposts_tagsをjoinして、更にtagsをjoinした上で、tag_idを条件に設定してfindする。

public function search(){
	$this->Post->recursive = 0;
	$options = array(
		'joins' => array(
			array(
				'table' => 'posts_tags',
				'alias' => 'PostsTag',
				'type' => 'inner',
				'conditions' => array(
					'Post.id = PostsTag.post_id'
				)
			),
			array(
				'table' => 'tags',
				'alias' => 'Tag',
				'type' => 'inner',
				'conditions' => array(
					'PostsTag.tag_id = Tag.id'
				)
			)
		),
		'conditions' => array(
			'Tag.id' => array(1,2)
		),
		'fields' => array(
			'Post.created',
			'Post.id',
			'Post.title',
			'User.name',
			'Tag.keyword',
		),
		'group' => 'Post.id'
	);
	$posts = $this->Post->find('all',$options);
	$this->set(compact('posts'));
}

left joinとinner joinの違いは、これ。inner joinはjoin元とjoin先が両方共情報があるものだけ抽出される。left joinは左優先。right joinは右優先。

Pocket
LINEで送る

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。