2013-08-07 22 views
1

我正在使用laravel构建一个小的API系统。 这是一小段代码,它搜索用户,如果存在,则发回一个json响应。当我运行这段代码时,它应该返回没有用户(usercontent为{}),is_null仍然返回false。我认为它应该在这种情况下返回true。 我已经计划在我的代码中使用它来检查某些用户是否存在,但现在它似乎每次都失败。is_null行为php laravel 4

我有误解吗?有人可以解释我错过了什么吗?谢谢。

响应代码:

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(); 
+0

你为什么不'var_dump($ user)'看看它有什么要说的。我不清楚'json'会出现什么情况'{}',它可能不仅仅是'null'值。 – brianmearns

+0

您是否尝试使用'empty($ user)'而不是'is_null($ user)'?另外,'gettype($ user)'的输出指出'$ user'变量是一个对象,所以它不是'null'。 – tolgamorf

+0

假设这个'json'函数的工作方式类似PHP的内置'json_encode',它看起来像没有任何公共成员的类的对象也被编码为'{}'。 – brianmearns

回答

4

根据您编辑的问题,如果你使用take()返回的对象将是一个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);

输出:空

对于您的具体问题,你可以修改它如下面的代码让它变成w ork:

$user = User::where('mobile_number', '=', Request::get('mobile_number')) 
        ->orwhere('email_id', '=', Request::get('email_id')) 
        ->first()