2017-05-04 119 views
1

我试图将我的用户的User_id与Creator_id匹配,以在我的帖子 中显示创建者用户名,但即时获取尝试从非对象错误获取属性,并且我不能得到角落找寻它尝试获取laravel中的非对象错误的属性

在我的控制器 postcontroller.php功能:

public function index() 
    { 
    $allusers = users::getusers(); 

    $posts = DB::table('posts')->get(); 
    foreach ($posts as $posts) { 
     foreach ($allusers as $allusers) { 
      if ($posts->creator_id == $allusers->user_id) { 
       array_push($posts,$allusers->username); 
      } 
     } 
    } 
    return view('blog',['posts'=>$posts]); 
    } 

在我的模型功能:

public static function getusers(){ 
    $allusers = users::all(); 
    return $allusers; 
    } 
+0

你能显示$ posts和$ allusers的输出吗? – Exprator

+0

您是否试过'print_r($ posts)'来检查它保存的数据? –

+0

它不是一个最好的方式来查看如何创建一些东西,我建议你最好的东西是保存user_id当用户创建一个帖子,然后你可以简单地从该use_id得到的一切 –

回答

3

您正在使用您的foreach相同的变量名循环:

foreach ($posts as $post) { 
    foreach ($allusers as $user) { 
     if ($post->creator_id == $user->user_id) { 
      array_push($post,$user->username); 
     } 
    } 
} 

但对于您的问题,您应该尽量在安置自己的型号

public function user(){ 
    return $this->belongsTo(User::class, 'creator_id', 'user_id); 
} 

然后在视图中添加此:

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

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many-inverse

+0

啊是的,我忘了变量名称:')我读了关于belongssto()方法,作为一种魅力感谢! –

0

您的用户表是否有像user_id这样的列?

我想你已经与帖子creator_id检查与用户表ID。

+0

为什么不在第一个循环中也有相同的名称作为帖子3次? –

相关问题