Laravel Eloquent ORM存在财产无效

时间:2014-08-28 15:26:30

标签: php laravel laravel-4 eloquent

使用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对象,就像wherefirst方法对它没有影响一样。这是预期的吗?

1 个答案:

答案 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);