【问题标题】:Trying to get property 'id' of non-object试图获取非对象的属性“id”
【发布时间】:2018-08-14 22:25:07
【问题描述】:

我想显示在墙上发帖的用户的 ID,但它显示错误。我正在学习 laravel 中的关系。 帖子属于 1 个用户。 1 个用户可以有很多帖子。 谢谢。

后模型

class Post extends Model
{
        public function users(){
        return $this->belongsTo('\App\User');
}

后控制器

class PostsController extends Controller
{
    public function index()
    {
        $p = \App\Post::all();
        return view('posts.index',compact('p'));
    }
}

帖子\索引

<?php 
    foreach ($p as  $value) {
    echo $value->title." ".$value->body." posted by ".$value->users->id." 
    <br>";}
 ?>

【问题讨论】:

    标签: laravel laravel-5 eloquent relational-database


    【解决方案1】:

    首先:您的帖子只有 1 个用户作为作者(作者),因此请将其设为 user() 而不是 users()

    1. 将关系添加到用户模型public function posts() { 关系为hasMany

    2. 使用 eagle load $posts = Post::with('user')-&gt;get();获取您的数据

    通过这种方式,您可以在刀片中获得您的作者信息,例如:

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

    希望对你有帮助。

    【讨论】:

    • 只需将方法 users() 设置为 user() 即可解决问题(y),但我无法理解其背后的逻辑,我的意思是函数名称可以是任何名称
    • 函数名按关系命名,如果你得到数据数组,你将使用复数,如果你得到对象,你将使用单数。例如。用户有很多帖子,所以功能是帖子(hasMany),帖子有一个用户,然后功能是用户(belongsTo)。
    【解决方案2】:

    您可以 dd($value->users) 并观看它!

    【讨论】:

      【解决方案3】:
      $value->users->id
      

      应该是

      答:$value-&gt;users()-&gt;id

      或者像这样更新你的控制器:

      乙:$p = \App\Post::with('users')-&gt;get();

      【讨论】:

      • A 给出错误 B 不起作用,给出相同的异常
      • 您确定您尝试显示的帖子实际上在您的数据库中有链接用户吗?
      • 您能确认您的posts 表有user_id 字段吗?
      • 您可以尝试使用php artisan tinker 在没有您的视图的情况下进行测试吗?类似:php artisan tinker$post = \App\Post::first(); $post-&gt;users-&gt;id;
      • 如果你在$post-&gt;users 上得到null,这意味着Eloquent 无法找到ID 为2 的用户。我非常确定你的帖子中的users 方法类是正确的,应该正确链接到user(除了缺少关闭})。我很想看看那个数据库的转储。
      猜你喜欢
      • 2019-04-30
      • 2021-05-26
      • 2019-03-10
      • 1970-01-01
      • 2013-07-24
      • 2020-06-26
      • 2018-07-03
      • 1970-01-01
      • 2019-03-27
      相关资源
      最近更新 更多