Kohana ORM - 在父模型中存储了许多模型

时间:2013-09-04 18:33:33

标签: php orm kohana

我有很多关于has_many-through关系的问题,但最后我找到了很好的例子here,它解决了我的大多数问题。但是,根据下面的代码,我有几个问题 首先,代码:

$artists = ORM::factory('artist')->find_all();
foreach ( $artists as $artist )
{
    foreach ( $artist->media->find_all() as $m )
    {
        echo $m->name;
    }
}

1)这个例子可能是控制器。如果我想在media中存储$artists以发送一个变量来查看,该怎么办?是否可以将media存储为艺术家对象中的媒体属性? (我的意思是例如$artists[0]->media[0]->name
2)没有这个循环可以完全加载$artists吗?

2 个答案:

答案 0 :(得分:1)

1)如果我理解正确,你需要从媒体中获取一些元素

$artists = ORM::factory('artist')->find_all()->as_array();
$media = $artists[0]->media->find_all()->as_array(); // media of first artist
$name = $media[0]->name;

2)见上面$ artists是一个ORM对象数组

答案 1 :(得分:0)

根据我的评论,这就是我要做的。

class Model_Artist extends ORM {

    ///
    /// Whatever you have now
    ///

    private $_media_cache = NULL;

    public function media($key = NULL)
    {
        // Check cache
        if($this->_media_cache == NULL)
        {
            $this->_media_cache = $this->media->find_all();
        }

        if($key !== NULL)
        {
             // Use Arr::get in case index does not exist
             // Return empty media object when it does not exist so you can 
             // 'harmlessly' ask for its properties
             return Arr::get($this->_media_cache, $key, ORM::factory('Media'));
        }

        return $this->_media_cache;
    }
}

可以调用

$artists[0]->media(0)->name