Laravel 一对多关系有很多困难

Laravel 一对多关系有很多困难,laravel,eloquent,Laravel,Eloquent,我正在为一个小规模CMS项目工作,其表格如下: - pages - id … - translations - page_id … - menus - id … - menu_page - menu_id - page_id … 在菜单模型中,我有以下关系: function pages(){ return $this->hasMany('Page'); } 是否可以直接在菜单和翻译之间创建关系,转换为类似

我正在为一个小规模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 = ?;

谢谢

无法使用内置方法,
hasManyThrough
无法使用多对多关系菜单页面

但是,您可以尝试以下解决方法:

公共函数getTranslationAttribute()
{
如果(!array_key_存在('translations',$this->relations))$this->loadTranslations();
返回$this->getRelation('translations');
}
受保护的函数loadTranslations()
{
$translations=Translation::join('menu\u page'、'translations.page\u id'、'='、'menu\u page.page\u id')
->其中('menu\u page.menu\u id',$this->getKey())
->不同的()
->获取(['translations.*','menu_id']);
$hasMany=new-illumb\Database\Eloquent\Relations\hasMany(Translation::query(),$this,'menu_id','id');
$hasMany->matchMany(数组($this),$translations,'translations');
退还$this;
}
现在您可以执行以下操作:

$menu=menu::find($id);
$menu->翻译;//雄辩的翻译模型集
所以基本上就像你使用任何关系一样。唯一的问题是你无法加载它