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):

在我的列表中我想要和应该有的东西:

你知道我错过了什么吗?我阅读了文档,查看 google 并在 Whosebug 上找到了我认为对我有帮助的解决方案,但他们没有,我感到沮丧,无法完成我认为应该简单的事情(? )

非常感谢您的帮助。

在你的例子中,你有 Recipe 属于一个 RecipeType

这样试试:

public function recipeType()
{
   return $this->belongsTo(RecipeType::class, 'recipe_types_id', 'id');
}

docs 中,您可以将模型 RecipeType 想象为 Post,将 Recipe 想象为 Comment

Recipe只属于一个RecipeTypeRecipeType可以有多个Recipe.

我希望我帮助你理解。