我有一个关于在 laravel 模型中访问关系的问题。我有与翻译模型和类别模型相关的类别模型(相同的模型/本身 - 一个类别可以使用数据透视表 CategoryToCategory 显示在其他类别中):
类别型号:
public function childCategories(){
return $this->hasManyThrough('App\Models\Category',
'App\Models\CategoryToCategory',
'id_parent_category',
'id',
'id',
'id_category');
}
public function translation($locale = null)
{
if ($locale == null) {
$locale = \App::getLocale();
}
return $this->hasOne('App\Models\CategoryLanguage', 'id_category', 'id')->where('locale', '=', $locale);
}
现在我采用当前类别+翻译+子类别:
$category = Category::with('translation', 'childCategories')->active()->where('id', $id)->first();
并显示所有孩子的名字:
@forelse($category->childCategories as $category)
{{ $category->translation->name }}
@endforelse
我工作,但每个子类别都会进行另一个查询以获取翻译(它没有为 forelse 中的元素加载)。那么如何在foreaching加载关系的类别模型中加载关系“翻译”?
我可以查询模型 CategoryToCategory 以获取该模型的所有子类别 + 加载翻译,结果是相同的:
$categories = CategoryToCategory::with('translation')->where('id_parent_category', $id)->get();
并且会有一个翻译查询。我仍然对使用第一个解决方案而不是查询 categoryToCategory 感到好奇。
有任何想法吗?
祝你今天过得愉快!