Laravel - 检索外国 table 名称
Laravel - Retrieve foreign table name
我在一个小型 laravel 项目中遇到了简单数据之间的关系问题。
我有一个列出菜谱的 recipes
table,还有一个列出菜谱类型的 recipe_types
table。在我的 recipes
table 中,我得到一个列 recipe_types_id
,它是引用 recipe_types
table 的 id
列的外键。
在 Laravel 中,我有一个视图,我想在其中列出所有食谱,并在其中显示食谱名称和食谱类型名称。
一个配方只能有一种类型,但一种类型可以链接到多个配方。
现在在 Recipe 模型中我添加了这个:
public function recipeType()
{
return $this->hasOne(RecipeType::class,'id');
}
我很确定关系 hasOne 是正确的,但由于我遇到的问题,我开始怀疑。
在我的 RecipeController 中,我像这样检索所有 post :
public function index()
{
$recipes = Recipe::with('recipeType')->get();
return view('recipes')->with('recipes', $recipes);
}
我现在遇到的问题是,当我在 blade 中显示 ID 1 的食谱(recipe_type_id 为 3)时,当我使用 {{ $recipe->recipeType->name }}
,return ID 为 1 的 recipe_type 的名称,而不是 ID 为 3 的 recipe_type 的名称。
这里是数据示例、当前行为和预期行为:
=== Recipe Table ===
{id: 1, name: 'Chocolate Cake', recipe_type_id: 3},
{id: 2, name: 'Carrot soup', recipe_type_id: 1}
=== Recipe Type Table ===
{id: 1, name: 'Soup'},
{id: 2, name: 'Main plate'},
{id: 3, name: 'Dessert'}
在我的列表中我现在得到的(检索到的类型 ID 是食谱的 ID):
- 食谱 1
- 名称:巧克力蛋糕
- 类型:汤
- 食谱 2
- 名称:胡萝卜汤
- 类型:主板
在我的列表中我想要和应该有的东西:
- 食谱 1
- 名称:巧克力蛋糕
- 类型:甜点
- 食谱 2
- 名称:胡萝卜汤
- 类型:汤
你知道我错过了什么吗?我阅读了文档,查看 google 并在 Whosebug 上找到了我认为对我有帮助的解决方案,但他们没有,我感到沮丧,无法完成我认为应该简单的事情(? )
非常感谢您的帮助。
在你的例子中,你有 Recipe
属于一个 RecipeType
。
这样试试:
public function recipeType()
{
return $this->belongsTo(RecipeType::class, 'recipe_types_id', 'id');
}
在 docs 中,您可以将模型 RecipeType
想象为 Post
,将 Recipe
想象为 Comment
。
Recipe
只属于一个RecipeType
,RecipeType
可以有多个Recipe
.
我希望我帮助你理解。
我在一个小型 laravel 项目中遇到了简单数据之间的关系问题。
我有一个列出菜谱的 recipes
table,还有一个列出菜谱类型的 recipe_types
table。在我的 recipes
table 中,我得到一个列 recipe_types_id
,它是引用 recipe_types
table 的 id
列的外键。
在 Laravel 中,我有一个视图,我想在其中列出所有食谱,并在其中显示食谱名称和食谱类型名称。
一个配方只能有一种类型,但一种类型可以链接到多个配方。
现在在 Recipe 模型中我添加了这个:
public function recipeType()
{
return $this->hasOne(RecipeType::class,'id');
}
我很确定关系 hasOne 是正确的,但由于我遇到的问题,我开始怀疑。
在我的 RecipeController 中,我像这样检索所有 post :
public function index()
{
$recipes = Recipe::with('recipeType')->get();
return view('recipes')->with('recipes', $recipes);
}
我现在遇到的问题是,当我在 blade 中显示 ID 1 的食谱(recipe_type_id 为 3)时,当我使用 {{ $recipe->recipeType->name }}
,return ID 为 1 的 recipe_type 的名称,而不是 ID 为 3 的 recipe_type 的名称。
这里是数据示例、当前行为和预期行为:
=== Recipe Table ===
{id: 1, name: 'Chocolate Cake', recipe_type_id: 3},
{id: 2, name: 'Carrot soup', recipe_type_id: 1}
=== Recipe Type Table ===
{id: 1, name: 'Soup'},
{id: 2, name: 'Main plate'},
{id: 3, name: 'Dessert'}
在我的列表中我现在得到的(检索到的类型 ID 是食谱的 ID):
- 食谱 1
- 名称:巧克力蛋糕
- 类型:汤
- 食谱 2
- 名称:胡萝卜汤
- 类型:主板
在我的列表中我想要和应该有的东西:
- 食谱 1
- 名称:巧克力蛋糕
- 类型:甜点
- 食谱 2
- 名称:胡萝卜汤
- 类型:汤
你知道我错过了什么吗?我阅读了文档,查看 google 并在 Whosebug 上找到了我认为对我有帮助的解决方案,但他们没有,我感到沮丧,无法完成我认为应该简单的事情(? )
非常感谢您的帮助。
在你的例子中,你有 Recipe
属于一个 RecipeType
。
这样试试:
public function recipeType()
{
return $this->belongsTo(RecipeType::class, 'recipe_types_id', 'id');
}
在 docs 中,您可以将模型 RecipeType
想象为 Post
,将 Recipe
想象为 Comment
。
Recipe
只属于一个RecipeType
,RecipeType
可以有多个Recipe
.
我希望我帮助你理解。