如何使用另一个有关系的表中的数据(user_id)从用户表中检索用户名

Posted

技术标签:

【中文标题】如何使用另一个有关系的表中的数据(user_id)从用户表中检索用户名【英文标题】:How to retrieve user name from user table by using data (user_id) from another table having relationship 【发布时间】:2018-07-09 01:41:56 【问题描述】:

我有两个模型

User.php

public function opportunities()

    return $this->hasMany('App\Opportunity');

Opportunity.php

public function user()

    return $this->belongsTo('App\User');
    

我在机会表中有user_id 列,并在每次用户发布记录时插入用户 ID(来自使用 Auth 的用户表)。

现在我需要一个视图来返回“这个帖子是这个用户发布的”

首先我通过

找到帖子ID
$posts =  Opportunity::find($id);
$posted_by = User::find($posts->user_id);
return view('opportunity.detail')->with('post', $posts, 'posted_by', $posted_by);

我已将用户名呈现为$posted_by->name

但是我在视图文件$posted_by 中有未定义的常量,而$post 很好。我是否以正确的方式做这件事?我将两个数组变量传递给帖子,但它不起作用。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您的控制器可能如下所示:

return view('opportunity.detail', [
    'post' => Opportunity::find($id);
]);

在视图中显示用户名:

Post  $post->title  posted by  $post->user->name 

https://laravel.com/docs/5.5/eloquent-relationships#relationship-methods-vs-dynamic-properties

如果出于某种原因您想使用->with(),请执行以下操作:

->with(['post' => $posts, 'posted_by' => $posted_by]);

或者:

->with('post', $posts)->with('posted_by', $posted_by); 

【讨论】:

感谢您的回答,但机会模式没有名称字段。机会模型只有一个 user_id 列来存储用户的 id。但是应该根据 user_id 从 User.php 模型中检索用户名 .... 我所做的是首先找到 post id。记录包含 user_id。我的控制器:$posts = Opportunity::find($id); $posted_by = User::where('name')->find($posts->user_id);返回视图('opportunity.detail')->with('post', $posts, 'posted_by', $posted_by);反正我会试试的 @ParajuliSunil 试试代码。此外,单击链接了解关系和动态属性。 感谢@Alexy Mezenin,它工作得很好!!!。我不知道这很简单。我开始使用 laravel 已经一个星期了,所以我对关系不太了解。再次感谢,我想我也会阅读您提到的链接以建立审查系统。【参考方案2】:

你可以放这个

public function getUserName() 
 return User::where('id', $this->user_id)->first()->name;

在您的 Opportunity.php 模型中并在您的视图中调用它

@foreach ($posts as $post)
   $post->getUserName() 
@endforeach

【讨论】:

这不是如何使用关系,请参阅其他答案。您可以在 getUserName() 方法中返回 $this->user->name

以上是关于如何使用另一个有关系的表中的数据(user_id)从用户表中检索用户名的主要内容,如果未能解决你的问题,请参考以下文章

使用外键搜索表中

如何使用 laravel 模型呈现两个有关系的表,例如“sales”表和“sales_content”的情况

如何使用组合框根据另一个组合框的值从不同的表中选择数据

Laravel eloquent 从不一定有关系的表关系中将数据从大到小排序

有效地为一个非常大的表中的每个组选择最新行?

填充视图模型中使用的类表