我正在为一个具有如下表的项目做小规模的CMS工作:
- pages
- id
…
- translations
- page_id
…
- menus
- id
…
- menu_page
- menu_id
- page_id
…在菜单模型中,我有这样的关系:
function pages(){
return $this->hasMany('Page');
}是否可以在菜单和转换之间直接创建关系,从而将其转换为类似于以下SQL查询的内容:
select translations.*
from translations
inner join menu_page on menu_page.page_id = translations.page_id
where menu_page.menu_id = ?;谢谢!
发布于 2014-05-21 16:41:51
你不能用内置的方法来做,hasManyThrough不会处理很多到多个关系菜单-页面。
但是,您可以尝试这样的解决方法:
public function getTranslationsAttribute()
{
if ( ! array_key_exists('translations', $this->relations)) $this->loadTranslations();
return $this->getRelation('translations');
}
protected function loadTranslations()
{
$translations = Translation::join('menu_page', 'translations.page_id', '=', 'menu_page.page_id')
->where('menu_page.menu_id', $this->getKey())
->distinct()
->get(['translations.*','menu_id']);
$hasMany = new Illuminate\Database\Eloquent\Relations\HasMany(Translation::query(), $this, 'menu_id', 'id');
$hasMany->matchMany(array($this), $translations, 'translations');
return $this;
}现在你可以这样做了:
$menu = Menu::find($id);
$menu->translations; // Eloquent Collection of Translation models所以基本上就像你会用任何关系。唯一的问题是你不能急于装载它。
https://stackoverflow.com/questions/23788844
复制相似问题