同一模型上的 forelse 访问关系 - laravel
Access relation in forelse on the same model - laravel
我有一个关于在 laravel 模型中访问关系的问题。我有与翻译模型和类别模型相关的类别模型(相同 model/itself - 一个类别可以使用 pivot table 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);
}
现在我使用当前类别 + 翻译 + child 个类别:
$category = Category::with('translation', 'childCategories')->active()->where('id', $id)->first();
并显示所有 child 的姓名:
@forelse($category->childCategories as $category)
{{ $category->translation->name }}
@endforelse
我工作 但是 每个 child 类别都会进行另一个查询以获取翻译(它不会为 forelse 中的元素加载)。那么如何在foreaching加载关系的类别模型中加载关系"translation"呢?
我可以查询模型 CategoryToCategory 以获取该模型的所有 child 类别 + 加载翻译,结果相同:
$categories = CategoryToCategory::with('translation')->where('id_parent_category', $id)->get();
并且将有一个翻译查询。我仍然对使用第一个解决方案而不是查询 categoryToCategory 感到好奇。
有什么想法吗?
祝你有愉快的一天!
要预先加载远距离关系,您可以像这样使用点符号:
$category = Category::with('translation', 'childCategories.translations')
->active()
->where('id', $id)
->first();
这称为 "nested eager loading" 并在此处的文档中引用:
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
我有一个关于在 laravel 模型中访问关系的问题。我有与翻译模型和类别模型相关的类别模型(相同 model/itself - 一个类别可以使用 pivot table 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);
}
现在我使用当前类别 + 翻译 + child 个类别:
$category = Category::with('translation', 'childCategories')->active()->where('id', $id)->first();
并显示所有 child 的姓名:
@forelse($category->childCategories as $category)
{{ $category->translation->name }}
@endforelse
我工作 但是 每个 child 类别都会进行另一个查询以获取翻译(它不会为 forelse 中的元素加载)。那么如何在foreaching加载关系的类别模型中加载关系"translation"呢?
我可以查询模型 CategoryToCategory 以获取该模型的所有 child 类别 + 加载翻译,结果相同:
$categories = CategoryToCategory::with('translation')->where('id_parent_category', $id)->get();
并且将有一个翻译查询。我仍然对使用第一个解决方案而不是查询 categoryToCategory 感到好奇。
有什么想法吗?
祝你有愉快的一天!
要预先加载远距离关系,您可以像这样使用点符号:
$category = Category::with('translation', 'childCategories.translations')
->active()
->where('id', $id)
->first();
这称为 "nested eager loading" 并在此处的文档中引用: https://laravel.com/docs/5.8/eloquent-relationships#eager-loading