Ошибка присоединения построителя запросов в Laravel 5.3

В моем контроллере

$thread = DB::table('threads')
         ->join('users', 'users.id', '=', 'threads.user_id')
         ->select('users.name')
         ->orderBy('threads.id', 'DESC')
        ->get();

 return view('thread.index', compact('thread'));

В моем index.blade

@foreach($thread as $item)
                  <td> {{ $item->thread }} </td>
                  <td> {{ $item->deskripsi }} </td>
                   <td> <p> Oleh : {{ $item->user_id }}</p> </td>
                      <td>  {{ $item->created_at->diffForHumans() }} </td>

  @endforeach            

и ошибка

Undefined property: stdClass::$thread (View: C:\xampp\htdocs\Aplikasi_Kelas_Server\resources\views\thread\index.blade.php)

Есть какое-нибудь решение? Я хочу, чтобы user_id отображался как имя в таблице пользователей


person febbynf    schedule 07.02.2017    source источник
comment
Можете ли вы показать нам содержимое $thread?   -  person Jerodev    schedule 07.02.2017
comment
На самом деле вы не используете Eloquent здесь.   -  person Rwd    schedule 07.02.2017
comment
да, извини. Его построитель запросов.   -  person febbynf    schedule 08.02.2017


Ответы (2)


Вы вызываете какое-то свойство, например thread, deskripsi

<td> {{ $item->thread }} </td>
<td> {{ $item->deskripsi }} </td>

Но вы не выбрали его по вашему запросу. вы выбираете только name!! Поэтому добавьте дополнительный столбец в свой запрос, например:

$thread = DB::table('threads')
         ->join('users', 'users.id', '=', 'threads.user_id')
         ->select('users.name', 'threads.thread', 'threads.deskripsi')
         ->orderBy('threads.id', 'DESC')
        ->get();
person Atiqur    schedule 07.02.2017
comment
спасибо работает! Я меняю только пользователей.имя становятся пользователями.* - person febbynf; 08.02.2017
comment
просто будьте осторожны, иногда у вас может быть одно и то же имя столбца в обеих таблицах, тогда с подстановочным знаком (*) вы получите ошибку. например, если у пользователей есть столбец name, а у потоков также есть столбец с именем name, тогда users.*, threads.* вызовет ошибку. - person Atiqur; 12.02.2017

Это зависит от отношений, которые вы определили в своих моделях. если у пользователей есть потоки, вы должны просто получить нужных пользователей и отправить их в блейд с помощью compact. Используйте эту функцию в вашей пользовательской модели

 public function getThreads()
    {
        return $this->hasMany(Threads::class);
    }

и если ваши отношения верны, вы сможете получить нити в своем лезвии с помощью этого:

@foreach($users as $user)
      @foreach($user->getThreads as $thread)
                  <td> {{ $thread->thread }} </td>
                  <td> {{ $thread->deskripsi }} </td>
                  <td> <p> Oleh : {{ $thread->user_id }}</p> </td>
                  <td>  {{ $thread->created_at->diffForHumans() }} </td>
      @endforeach 
@endforeach  
person Onix    schedule 07.02.2017