使用Laravel和Eloquent ORM,我正在尝试确定我的数据库中是否存在记录。这是我用来测试的代码:
$store = Store::where('ext_hash', 'thisHashExists')->first();
if($store->exists){
echo 'yes';
}
else{
echo 'no';
}
$another_store = Store::where('ext_hash', 'thisHashDoesNotExist')->first();
if($another_store->exists){
echo 'yes';
}
else{
echo 'no';
}
对于第一个示例,存在散列,它可以正常工作,但在第二个示例中,当散列不存在时,我在$another_store->exists
行上收到错误。
Trying to get property of non-object
我猜这个错误是因为$ another_store对象实际上不是一个对象,因为我试图用静态方法创建它。这个exists
属性应该如何使用?
我首先尝试创建对象,然后使用非静态方法检索它,但这些方法似乎没有那样工作,除非我遗漏了一些东西。例如:
$store = new Store();
$store->where('id', 1)->first();
print_r($store);
该代码只打印一个空的Store
对象,就像where
和first
方法对它没有影响一样。这是预期的吗?
答案 0 :(得分:3)
Eloquent
有一个很好的方法firstOrFail()
,如果你的请求没有返回正确的行,它会抛出ModelNotFoundException
。之后,您可以执行标准try-catch
,或通过App::error(function(ModelNotFoundException $e){ Response::make('model not found'); })
注册错误处理程序。
此外,如果您的请求找不到,您可以使用firstOrNew()
获取模型的新实例。
如果您希望尽可能简化代码,可以查看instanceof Eloquent
。
至于你的错误 - first
返回一个对象,它不会给它的调用者注入水分,所以如果你这样做,你的代码就会起作用:
$store = new Store();
$foundStore = $store->where('id', 1)->first();
print_r($foundStore);