在null上调用成员函数all()

时间:2017-01-27 13:00:18

标签: laravel eloquent

我的关系是User和UserDetail.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table ='users';

    protected $fillable = ['name', 'email', 'password'];

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

UserDetail.php   

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserDetail extends Model
{
    protected $table ='user_details';

    protected $fillable = ['user_id', 'address', 'gender'];

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

但是当我在控制器中调用它时

  public function showUserInformation($id){
    $details= $this->user->detail;
    dd($details);
  }
  

当我读它时它返回null。为什么会这样?请帮助我   请

4 个答案:

答案 0 :(得分:0)

尝试(在您的User.php中)

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

user()更改为detail()

答案 1 :(得分:0)

您必须声明id是User模型。 将您的功能更改为:

     public function showUserInformation(User $id){
         $details= $id->user->gender;  
         dd($details);
  }

答案 2 :(得分:0)

我认为你误解了这个&#39; $ this&#39;关键字。

在你的控制器中你有这段代码:

  public function showUserInformation($id){
    $details= $this->user->detail;
    dd($details);
  }

在此代码示例中,$ this指向控制器。所以基本上你要求我从这个控制器中给我一个用户变量并从中获取详细信息&#39;。但控制器是否有用户变量? (我猜你没有,因为你得到了空错误。)

你可以直接抓住模型:

  public function showUserInformation($id){
    $details= UserDetail::whereUserId($id)->first();
    dd($details);
  }

答案 3 :(得分:0)

是的,我设法得到数据,但没有通过雄辩。我做了传统的查询。感谢你的帮助