2013-08-07 17 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()