Bağlama hasOne kullanarak HABTM ilişkili verileri almak nasıl

0 Cevap php

I http://book.cakephp.org/view/83/hasAndBelongsToMany-HABTM belgelenen örnek takip ediyorum

Ben hasOne kullanarak ilgili verileri almak için çalışıyorum.

I created 3 tables posts, tags and posts_tags. I wrote following code to debug Posts.

$this->Post->bindModel(array(
    'hasOne' => array(
        'PostsTag',
        'FilterTag' => array(
            'className' => 'Tag',
            'foreignKey' => false,
            'conditions' => array('FilterTag.id = PostsTag.tag_id')
))));
$output=$this->Post->find('all', array(
        'fields' => array('Post.*')
));
debug($output);

Ben aşağıdaki gibi bir şey çıktı bekliyordum.

Array
(  
    0 => Array
        {
        [Post] => Array
            (
                [id] => 1
                [title] => test post 1
            )
    [Tag] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => php
                )
           [1] => Array
                (
                    [id] => 2
                    [name] => javascript
                )
           [2] => Array
                (
                    [id] => 3
                    [name] => xml
                )
        )
}

But my output do not have Tags at all. Here is what I got.

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

        )

    [1] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [title] => test post2
                )

        )
)

Nasıl yazı ile birlikte ilgili etiketler olsun.

I know I am missing something, but unable to figure out. Any help would be highly appreciated.


Edit 1:

Tamam ben birkaç varyantları çalıştı.

Denedim:

$this->Post->bindModel(array(
'hasOne' => array(
        'PostsTag',
        'FilterTag' => array(
            'className' => 'Tag',
            'foreignKey' => false,
            'conditions' => array('FilterTag.id = PostsTag.tag_id')
))));
$output=$this->Post->find('all');

I got:

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [PostsTag] => Array
                (
                    [id] => 1
                    [post_id] => 1
                    [tag_id] => 1
                )

            [FilterTag] => Array
                (
                    [id] => 1
                    [name] => php
                )

        )

    [1] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [PostsTag] => Array
                (
                    [id] => 2
                    [post_id] => 1
                    [tag_id] => 2
                )

            [FilterTag] => Array
                (
                    [id] => 2
                    [name] => javascript
                )

        )

    [2] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [PostsTag] => Array
                (
                    [id] => 3
                    [post_id] => 1
                    [tag_id] => 3
                )

            [FilterTag] => Array
                (
                    [id] => 3
                    [name] => xml
                )

        )
)

Denedim:

$output=$this->Post->find('all', array(
        'fields' => array('Post.*', 'FilterTag.*'),
        'recursive' => 1
));

I got:

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [FilterTag] => Array
                (
                    [id] => 1
                    [name] => php
                )

        )

    [1] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [FilterTag] => Array
                (
                    [id] => 2
                    [name] => javascript
                )

        )

    [2] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => test post1
                )

            [FilterTag] => Array
                (
                    [id] => 3
                    [name] => xml
                )

        )
)

Sadece durumda ben bir şey eksik, burada benim Mesajlar denetleyicisi:

class PostsController extends AppController {
    var $name = 'Posts';
    var $helpers = array('Html','Ajax','Javascript');
    var $components = array( 'RequestHandler' );

    function index() {
        $this->Post->bindModel(array(
            'hasOne' => array(
                'PostsTag',
                'FilterTag' => array(
                    'className' => 'Tag',
                    'foreignKey' => false,
                    'conditions' => array('FilterTag.id = PostsTag.tag_id')
        ))));

        $output=$this->Post->find('all', array(
                'fields' => array('Post.*', 'FilterTag.*'),
                'recursive' => 1
        ));

    }
}

Ve burada benim Mesajlar modeli:

class Post extends AppModel {
    var $name = 'Post';
}

Yemek kitabı çalışmıyor gelen örnek neden ben hala merak ediyorum.

0 Cevap