如何在每个线程(Laravel)中获取用户名?

时间:2016-03-08 09:47:55

标签: php multithreading laravel

我想要获得创建的用户的名称是自己的线程。像迈克尔一样关于食物。因此,食物线的底部应该是迈克尔的名字。

我为此编写了代码,但它并没有真正起作用。也许有人可以找到错误。

我有两个型号。线程模型和用户模型。

线程模型:

<?php
namespace App\Models\Thread;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Thread extends Model {
    public $table = 'thread';
    public $fillable = [
        'thread',
        'content',
        'user_id'
    ];

    public function userthread() {
        return $this->belongsTo('User','user_id', 'id');

用户模型:

<?php

namespace App;

   use ...

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'password'];

    protected $hidden = ['password', 'remember_token'];

    public function threaduser() {
        return $this->hasMany('App\Models\Thread\Thread','user_id', 'id');
    }
}

现在是控制器方法,我试图获取名称:

 public function show($id)
    {
        $thread = Thread::query()->findOrFail($id);
        $threaduser = Thread::where('user_id', Auth::user()->id)->with('userthread')->get();
        return view('test.show', [
            'thread' => $thread,
            'threaduser' => $threaduser
        ]);
    }

在我的HTML中:

{{$threaduser->name}}

我得到的错误信息是:

未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ name(查看:/var/www/laravel/logs/resources/views/test/show.blade.php)

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:0)

将其更改为

{{$threaduser->userthread->name}}

将Thread Class中的userthread()函数更改为

public function userthread() {
    return $this->belongsTo('App\User','user_id', 'id');
}

答案 1 :(得分:0)

get()为您提供了一个不是模型的集合,您必须对它进行预测,例如

@foreach ($threadusers as $threaduser)
    {{ $threaduser->userthread->name }}
@endforeach

如果每个用户只有一个主题,则使用first代替get

当然,取决于你想做什么。