2011-11-07 7 views
1

私はCodeIgniterとDataMapperを使って簡単なブログを書いていますが、関係に問題があります。 DattaMapperで特定のタグで投稿を取得するにはどうすればいいですか?関係にある表からデータを取得

SELECT 
    posts.id, 
    posts.title, 
    posts.content, 
    posts.created, 
    tags.name 
FROM 
    posts, 
    posts_tags, 
    tags 
WHERE 
    posts.id = posts_tags.post_id AND 
    posts_tags.tag_id = tags.id AND 
    tag.name = 'php'; 
ORDER BY 
    posts.created DESC; 

PHPコード:

<?php 
class Post extends DataMapper 
{ 
    public $has_many = array('tag'); 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function getPostsByTags($name, $offset) 
    { 
     // this doesn't work 
     // $this->get_where(array('tags.name', $name), 3, $offset); 
    } 
} 

class Tag extends DataMapper 
{ 
    public $has_many = array('post'); 

    public function __construct() 
    { 
     parent::__construct(); 
    } 
} 

データベーススキーム:

enter image description here

任意の提案SQLクエリは、そのようなものでしょうか?

答えて

1

私はdocuを読んで、これは仕事ができると思う:

$this->post->get(); 
foreach ($this->post $post) 
{ 
    foreach ($post->tag->get() as $tag) 
    { ... } 
} 

はgreateのルックス。私は

更新read here ...それは自分自身を試してみる必要があります。

$p = new Post(); 
// Get users that are related to the Moderator group 
$p->where_related_tag('name', 'php')->get(); 
+0

しかし、この溶液中で、私はすべての記事を取得し、タグ名を優先していたポストを確認してください。だから私はこのデータの一部が必要ないデータを検索します。 – PaulP

+0

ああそうです。これのために何かを見つけた。たぶん次回に自分で文書を読んでいるのでしょうか? ;) – PiTheNumber

+0

PiTheNumberは正しい - あなたはタグのリストを持っていて、それらのタグを持つ投稿を取得したいと言っています。あなたはこれを行うことができます: '$ p-> where_related_tag( 'name'、 'php') - > or_where_related_tag( 'name'、 'html') - > get();' - これはあなたにすべての投稿を与えますあなたが使用しているタグを持っています。 – swatkins

関連する問題