我有很多关于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
吗?
答案 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