web-dev-qa-db-ja.com

Laravel 5.5非オブジェクトのプロパティ 'id'を取得しようとしています

Laravelは初めてです。Laravelバージョン5.5を使用しました

Postmanでログインしようとすると、「非オブジェクトのプロパティ '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
more

エラーは、find()がレコードを見つけられないときに$this->clientがnullになるためです。

レコードが存在するかどうかを確認する必要があります。

変更:

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

To:

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

ドキュメント:

Laravel Eloquent docs から、指定されたIDのレコードが見つからない場合、404エラーがスローされます。

6
Sapnesh Naik

ID = 1のUserモデルのデータベーステーブルにレコードがあることを確認してください。User:: find(1)を使用している場合Laravelレコードが存在しない場合、データベースからこのレコードを取得しようとしますこれはnullを返します

0
Nimfus

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
    ];
}
0
Sohel0415

プロジェクトデータベースに存在しないIDにアクセスしようとしても、同じ問題が発生しました。これは$user= user::findOrFail($id);で私の問題を解決しました。

0
latifa saee