如何使用另一个有关系的表中的数据(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”的情况