提问者:小点点

Laravel 5.2试图获取用户id帖子


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

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

然后,如果用户id等于,则添加显示post的路由。

应用程序\用户。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;

});

下面是数据库的屏幕截图,显示我在posts表中有一篇用户_id=1的帖子。我在用户表中还有一个id=1的用户。MySQL数据为什么访问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}

共3个答案

匿名用户

您的一对一关系应为:app\User。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();
}

匿名用户

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

匿名用户

由于"user_id"字段位于"帖子"表中,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();
}