簡體   English   中英

當在nloquent查詢范圍內可空列值為null時返回空JSON對象

[英]Returning an empty JSON object when a nullable column value is null within an eloquent query scope

我有以下查詢范圍將返回可能存儲在容器內的鍵(JSON):

public function scopeKeys($query, $container)
{
    return $query->select('keys')
        ->whereNotNull('keys')
        ->where('name', $container)
        ->value('keys');
}

...在我的控制器中我通過以下方式訪問:

Containers::keys($container);

當密鑰存在時,我按預期將它們取回; 然而; keys字段為null時,我收到以下錯誤:

類Illuminate \\ Database \\ Eloquent \\ Builder的對象無法轉換為字符串

我想避免使用firstOrFail()因為我不想拋出404,我想返回一個空的JSON對象。

我確定我可以利用->exists()來檢查然后有條件地返回但是如果它們確實存在的話我會進行兩次查詢 - 看起來很草率。

范圍不是為了執行查詢,而是為了准備它們。

您可以在范圍外執行查詢:

public function scopeKeys($query, $container)
{
    return $query->select('keys')
        ->whereNotNull('keys')
        ->where('name', $container);
}

$keys = Containers::keys($container)->value('keys');

或者您定義一個“普通”靜態方法:

public static function keys($container)
{
    return static::query()->select('keys')
        ->whereNotNull('keys')
        ->where('name', $container)
        ->value('keys');
}

$keys = Containers::keys($container);

這似乎符合法案:

public function scopeKeys($query, $container)
{
    $query = $query->select('keys')
        ->whereNotNull('keys')
        ->where('name', $container)
        ->first();

    if (is_null($keys)) {
        return json_encode((object) null);
    }
    return $query->keys;
}

...並允許我保持控制器清潔:

public function index($container)
{
    $rsp = Containers::keys($container);

    return response($rsp)
        ->withHeaders(['Content-Type' => 'text/json']);
}

打開輸入 - 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM