1

私は、laravel を使用して小さな API システムを構築していました。これは、ユーザーを検索する小さなコードであり、存在する場合は json 応答を返します。ユーザーを返さないようにこのコードを実行したとき (usercontent は {})、is_null はまだ false を返します。この場合、trueを返す必要があると思いました。特定のユーザーが存在するかどうかを確認するためにコードで使用することを計画していましたが、今では毎回失敗しているようです。

私は何かを誤解していますか?誰かが私が見逃したことを説明できますか? ありがとう。

応答コード:

if($user)
{
    return Response::json(array(
        'error' => 'true',
        'message' => 'User exists.',
        'user' => is_null($user),
        'usertype' => gettype($user),
        'usercontent' => $user
    ), 400);
}

レスポンス json:

{
    "error":"true",
    "message":"User exists.",
    "user":false,
    "usertype":"object",
    "usercontent":{}
}

編集:

私はした

var_dump($user);
var_dump(empty($user));

戻るように見える

object(Illuminate\Database\Eloquent\Collection)#201 (1) { ["items":protected]=> array(0) { } } 
bool(false)

編集2:

$user = User::where('mobile_number', '=', Request::get('mobile_number'))
                    ->orwhere('email_id', '=', Request::get('email_id'))
                    ->take(1)
                    ->get();
4

1 に答える 1

4

編集した質問に基づいて、返されたコレクションにモデル オブジェクトが 1 つある場合でもtake()、返されたオブジェクトがIlluminate\Database\Eloquent\Collectionではなく ,Illuminate\Database\Eloquent\Modelである場合、または何もない場合 (その場合、空のコレクションが返されます)。

代わりに、find()主キーを使用してモデル オブジェクトを使用および取得するか、クエリに追加first()して、クエリからの最初の結果をモデル オブジェクトとして取得することができます。これら 2 つのメソッドはnull、クエリがエントリと一致しない場合に返されます。

例えば:

$user = User::find(1);

出力:

{
  "error":"true",
  "message":"User exists.",
  "user":false,
  "usertype":"object",
  "usercontent":{
    "timestamps":true,
    "autoHashPasswordAttributes":true,
    "validationErrors":{},
    "throwOnValidation":false,
    "autoHydrateEntityFromInput":false,
    "forceEntityHydrationFromInput":false,
    "autoPurgeRedundantAttributes":false,
    "incrementing":true,
    "exists":true
  }
}

$user = User::find(483);

出力: 空

特定のクエリについては、次のコードのように変更して機能させることができます。

$user = User::where('mobile_number', '=', Request::get('mobile_number'))
                    ->orwhere('email_id', '=', Request::get('email_id'))
                    ->first()
于 2013-08-07T18:42:16.650 に答える