1

我正在使用 laravel 构建一个小型 API 系统。这是其中的一小段代码,用于搜索用户,如果存在,则返回一个 json 响应。当我运行此代码以使其不返回任何用户(用户内容为 {})时,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

根据您编辑的问题,如果您使用take()返回的对象将是 a Illuminate\Database\Eloquent\Collection,而不是Illuminate\Database\Eloquent\Model,即使返回的集合有一个模型对象,或者没有(在这种情况下,将返回一个空集合)。

相反,您可以使用find()主键来使用和获取模型对象,或者添加first()到查询中以从查询中获取第一个结果作为模型对象。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 回答