如何检查Laravel中的记录是否是新的?

时间:2013-08-28 21:27:21

标签: laravel eloquent

我最近开始使用Eloquent。

当我使用PHP Active Record时,有一个很好的函数可以检查记录是从数据库加载还是新实例。在Eloquent中我可以使用类似的东西吗?

新的我的意思是:

$article = new Article;

而数据库中的一个将是

$article = Article::find(1);

4 个答案:

答案 0 :(得分:91)

所有laravel模型都有->exists属性。

更具体地说,如果模型是从数据库加载的,或者自创建以来已保存到数据库,则exists属性将为true;否则就是假的。

如果您想知道自从数据库中获取模型后是否已修改模型,或者根本没有保存(也就是说需要保存),那么您可以使用->isDirty()函数。

Laravel API是这类信息的有用位置: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty  并且通常比默认文档更轻松。

答案 1 :(得分:2)

我们可以在模型上使用$appends,如果您将多次使用它...例如,检查创建后是否编辑了新创建的评论。

class Comment extends Model
{
     protected $appends = ['is_edited'];

     public function getIsEditedAttribute()
     {
          return $this->attributes['is_edited'] = ($this->created_at != $this->updated_at) ? true : false;
     }
}

您可以像

一样使用它
$comment = Comment::findOrFail(1);

if($comment->is_edited){
      // write your logic here
}

答案 2 :(得分:0)

我使用Laravel Eloquent的updateOrCreate()方法从CSV文件导入时创建或更新记录。

$product = $this->updateOrCreate($attributes, $values);

我想计算新创建的记录和更新记录的数量。由于updateOrCreate()方法在创建时将记录保存到数据库,因此$product->exists将始终返回true

另一种方法是将模型的created_atupdated_at时间戳与当前时间进行比较:

if($product->created_at == Carbon::now())
            $created++;
        elseif ($product->updated_at == Carbon::now())
            $updated++;

答案 3 :(得分:-3)

$article = new Article;
var_dump($article->id); == null

$article = Article::find(1);
var_dump($article->id); == string(1) "1"

所以

if ($article->id) {
     // I am existing
} else {
    // I am new
}