Php变量和变量赋值返回的值不同

问题描述 投票:0回答:1

我正面临一个非常奇怪的问题。问题是不久。

$x = some_object;
return response()->json($x)            =>  {}  
return response()->json(some_object)   =>  {some_object}

这是所有的代码(代码在 else 语句里面)。

public function checkCalls(Request $req)
{
    $active_call = VideoCall::where("receiver_id", (int) $req->input("user_id"));

    if ($active_call->where("call_situation", "call")->exists()) {
        $active_call = $active_call->first();

        $caller_id = $active_call->caller_id;
        $caller = User::where("id", $caller_id)->first();
        $caller_name = $caller->name;
        $caller_img = $caller->image;
        return response()->json([
            "friend" => $caller_id,
            "caller_name" => $caller_name,
            "caller_img" => $caller_img
        ]);
    } else if ($active_call->where("call_situation", "yes")->exists()) {
        return response()->json("gorusme yapıyor");
    } else if ($active_call->where("call_situation", "decline")->exists()) {
        $caller_id = $active_call->where("call_situation", "decline")->first()->caller_id;
        return response()->json("arama red edildi", $caller_id);
    } else {
        return response()->json("arama yok"); 
        //this code runs, I m changing here to get different returns  
    }
}

当我在else括号里改的时候,这就会返回 true

return response()->json(VideoCall::where("receiver_id", (int) $req->input("user_id"))->exists());

但这一回 false:

return response()->json($active_call->exists());

$active_call 由于某种原因,返回一个空对象。$active_call 变化 if() 括号,但我找不到任何可以改变它的东西。所以为什么会发生这种情况?

*编辑:使问题更加清晰,添加了一个较短版本的问题。

*编辑 2: else 语句中的代码正在运行。我改变了那个返回语句以得到不同的结果。

php mysql laravel variables
1个回答
1
投票

这是因为你重新分配了 $active_call 在你的功能中。

$active_call = $active_call->first();

它不再是一个 Builder但却是一个 VideoCall.

所以,这条线。

return response()->json($active_call->exists());

实际上是:

return response()->json(VideoCall::where("receiver_id", (int) $req->input("user_id"))->first()->exists());

请注意附加的 ->first()

© www.soinside.com 2019 - 2024. All rights reserved.