【问题标题】:Laravel 5.2 trying to get user_id postLaravel 5.2 试图获取 user_id 帖子
【发布时间】:2018-08-24 04:55:13
【问题描述】:

我正在学习关于 Udemy 的 Laravel 课程,虽然我遵循了讲师所做的一切,但由于某种奇怪的原因,我没有得到预期的结果。

这是一对一的关系课,我在用户模型中添加了一个函数来检查它是否有任何帖子。

如果 user_id 等于,则添加显示帖子的路由。

app\User.php

public function post() {

    return $this->hasOne('App\Post');

}

app\Http\routes.php

    Route::get('/user/{id}/post', function($id) {

    return User::find($id)->post;

});

下面是来自数据库的屏幕截图,显示我在帖子表中有一个 user_id = 1 的帖子。我在用户表中还有一个 id=1 的用户。 MySQL data 为什么访问 domain/user/1/post 时出现空白页?

Sohel,我从你的函数中得到了结果,但必须使用

var_dump(User::with('post')->where('id',1)->first());

然后尝试了其他方法:

return User::with('post')->where('id',$id)->first();

结果如下:

{"id":1,"name":"Nick","email":"nick@kriogen.name","created_at":"2018-03-15 09:49:51","updated_at":"2018-03-15 09:49:51","post":null}

【问题讨论】:

  • 您检查laravel.log 文件是否有任何错误?
  • 日志中没有错误。此外,如果我有一个,它会显示一个错误,但是,我得到的只是一个空白页,并且日志文件中没有错误。
  • 试试return $this->hasOne('App\Post', 'post_id', 'id');。此外,如果您想查看错误,请启用错误报告。
  • 请展示dd(User::with('post')->where('id',1)->first())提供的内容
  • 对不起,只是想通了并添加了您所说的答案,然后看到了您的评论。谢谢,是的,这就是我遇到的问题。

标签: php laravel laravel-5.2 laravel-eloquent


【解决方案1】:

由于“user_id”字段在“posts”表中,App\User模型中的关系需要是:

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

然后,不带括号调用它得到结果:

public function getPost {
    $user= User::find($id);
    return $user->post;
}

当你使用括号时,你得到的是构建器而不是结果。示例:

public function getPost {
    $user= User::find($id);
    return $user->post()->get();
}

public function getPost {
    $user= User::find($id);
    return $user->post()->where('name', 'like', '%hello%')->get();
}

【讨论】:

    【解决方案2】:

    问题不在于函数,问题在于数据库。 列 deleted_at 不为 NULL,它将帖子标记为软删除,因此不显示。

    【讨论】:

      【解决方案3】:

      您的一对一关系应该是: 应用\用户.php

      public function post() {
          return $this->hasOne('App\Post');
      }
      

      app\Post.php

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

      您可以尝试在控制器中执行此功能:

      public function getPost {
          $user= User::find($id);
          return $user->post();
      }
      

      【讨论】:

        【解决方案4】:

        如果你想检查用户是否有任何帖子,我认为你需要->hasMany() 关系,因为用户可以有很多帖子......并且代码是:

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

        电话:

        User::find($id)->posts;
        

        【讨论】:

        • 嗯,重点是一对一的关系,因此,我有 1 个用户,1 个使用该用户 ID 的帖子。如果我知道他没有,我为什么要检查他是否有超过 1 个?也尝试过你的方法,我得到的是: [] 这意味着它想要显示一组帖子,但它没有要显示的帖子。
        • 您的用户 ID 字段是否名为“user_id”?检查 laravel 文档在哪里取悦 db 字段名称,例如 hasOne('App\Post', 'user_id')
        猜你喜欢
        • 2019-11-11
        • 2016-12-23
        • 2018-01-15
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多