【发布时间】:2019-10-10 03:38:24
【问题描述】:
我有以下查询范围,它将返回可能存储在容器内的键 (JSON):
public function scopeKeys($query, $container)
{
return $query->select('keys')
->whereNotNull('keys')
->where('name', $container)
->value('keys');
}
...在我的控制器中,我通过以下方式访问它:
Containers::keys($container);
当密钥存在时,我按预期将它们取回;然而;当keys 字段为空时,我收到以下错误:
Illuminate\Database\Eloquent\Builder 类的对象无法转换为字符串
我想避免使用firstOrFail(),因为我不想抛出 404,我想返回一个空的 JSON 对象。
我确定我可以使用->exists() 进行检查,然后有条件地返回,但是如果它们确实存在,我会进行两个查询 - 看起来很草率。
【问题讨论】:
-
firstOrFail和 try/catch 怎么样?并在 catch 块中返回空 JSON。 -
也检查 firstOr() ?
-
看起来问题不在范围查询中。
value方法只能返回null或传递的列值。请显示完整的代码和异常跟踪。 -
我在 Tinker 中检查了您的查询,当没有任何匹配项时,它会返回
null,它不会引发任何错误。您如何在控制器中处理此方法的响应? -
公共函数索引($container) { $rsp = Containers::keys($container);返回响应($rsp) ->withHeaders(['Content-Type' => 'text/json']); }
标签: php laravel laravel-5 eloquent laravel-5.8