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

时间:2018-01-30 08:22:30

标签: laravel model eloquent laravel-blade

我有两个型号

user.php的

public function opportunities()
{
    return $this->hasMany('App\Opportunity');
}

Opportunity.php

public function user()
{
    return $this->belongsTo('App\User');
}    

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

现在我需要一个返回&#34的视图;此帖子已发布此用户"

首先我通过

找到帖子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没问题。我是以正确的方式做到的吗?我将两个数组变量传递给帖子,但它无法正常工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

你可以把这个

public function getUserName() {
 return User::where('id', $this->user_id)->first()->name;
}
在您的Opportunity.php模型中

并在您查看中调用

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