Laravel 5.5试图获得房产' id'非对象

时间:2018-01-24 12:12:06

标签: php mysql laravel laravel-5

我是Laravel的新手。我使用了Laravel 5.5版

如果我尝试使用邮递员登录。我得到了"试图获得财产' id'非对象"错误。错误行是

    private $client;

public function __construct(){
    $this->client = Client::find(1);
}

public function login(Request $request){

    $this->validate($request, [
        'username' => 'required',
        'password' => 'required'
    ]);

    return $this->issueToken($request, 'password'); // this line has error

}

issueToken函数

public function issueToken(Request $request, $grantType, $scope = ""){

    $params = [
        'grant_type' => $grantType,
        'client_id' => $this->client->id,
        'client_secret' => $this->client->secret,           
        'scope' => $scope
    ];

    if($grantType !== 'social'){
        $params['username'] = $request->username ?: $request->email;
    }

    $request->request->add($params);

    $proxy = Request::create('oauth/token', 'POST');

    return Route::dispatch($proxy);

}

我在Register上遇到同样的错误。但是我的用户成功注册了500错误(试图获取属性' id'非对象)

4 个答案:

答案 0 :(得分:4)

错误是因为$this->clientfind()无法找到记录时为空。您需要确定记录是否存在。

变化:

$this->client = Client::find(1);

要:

$this->client = Client::findOrFail(1);

来自docs, 如果找不到具有指定标识的记录,则会抛出404错误。

答案 1 :(得分:0)

确保您在用户模型的数据库表中有id = 1的记录。当您使用User :: find(1)时,Laravel尝试从数据库获取此记录,如果记录不存在,则返回null

答案 2 :(得分:0)

issueToken()方法 -

$client = Client::find(1);
if($client!=null){
     $params = [
       'grant_type' => $grantType,
       'client_id' => $client->id,
       'client_secret' => $client->secret,           
       'scope' => $scope
    ];
}else{
    $params = [
       'grant_type' => $grantType,
       'client_id' => null,
       'client_secret' => null,           
       'scope' => $scope
    ];
}

答案 3 :(得分:0)

当我尝试访问项目数据库中不存在的ID时,我遇到了同样的问题。这个$user= user::findOrFail($id);解决了我的问题。