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

wqnecbli  于 2023-10-22  发布在  其他
关注(0)|答案(6)|浏览(210)

我最近开始使用Eloquent。
当我使用PHP Active Record时,有一个很好的函数可以检查记录是从数据库加载的还是一个新示例。有没有类似的东西在雄辩中,我可以使用?
新的意思是:

  1. $article = new Article;

而数据库中的一个则是

  1. $article = Article::find(1);
ar7v8xwq

ar7v8xwq1#

所有laravel模型都有一个->exists属性。
更具体地说,如果模型是从数据库加载的,或者在创建后已经保存到数据库中,则exists属性将为true;否则它将是假的。
如果你想知道模型从数据库中抓取后是否被修改过,或者根本没有保存(如果需要保存),那么你可以使用->isDirty()函数。
Laravel API是一个有用的地方,可以提供这类信息:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty,并且通常比默认文档提供更多的信息。

zujrkrfu

zujrkrfu2#

您的模型对象有一个专门为此设计的属性。它是最近创建的:

  1. $item = Item::firstOrCreate(['title' => 'Example Item']);
  2. if ($item->wasRecentlyCreated === true) {
  3. // item wasn't found and have been created in the database
  4. } else {
  5. // item was found and returned from the database
  6. }

有关exists变量与wasRecentlyCreated变量的工作方式之间的更多说明(从下面CJ Dennis的评论中复制)

  1. /* Creating a model */
  2. $my_model = new MyModel;
  3. $my_model->exists === false;
  4. $my_model->wasRecentlyCreated === false;
  5. $my_model->save();
  6. $my_model->exists === true;
  7. $my_model->wasRecentlyCreated === true;

与从先前的请求加载模型相反:

  1. /* Loading a Model */
  2. $my_model = MyModel::first();
  3. $my_model->exists === true;
  4. $my_model->wasRecentlyCreated === false;
展开查看全部
wnavrhmk

wnavrhmk3#

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

  1. class Comment extends Model
  2. {
  3. protected $appends = ['is_edited'];
  4. public function getIsEditedAttribute()
  5. {
  6. return $this->attributes['is_edited'] = ($this->created_at != $this->updated_at) ? true : false;
  7. }
  8. }

此时你是用它时

  1. $comment = Comment::findOrFail(1);
  2. if($comment->is_edited){
  3. // write your logic here
  4. }
展开查看全部
2guxujil

2guxujil4#

  1. $article = new Article;
  2. var_dump($article->id); == null
  3. $article = Article::find(1);
  4. var_dump($article->id); == string(1) "1"

所以

  1. if ($article->id) {
  2. // I am existing
  3. } else {
  4. // I am new
  5. }
zi8p0yeb

zi8p0yeb5#

在Laravel中,如果一条记录是新创建的,并且之前没有更新过,那么created_at和updated_at将是相同的。

  1. if($article->created_at == $article->updated_at) {
  2. // Logic goes here
  3. }
mm5n2pyu

mm5n2pyu6#

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

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

我想计算新创建的记录和更新的记录的数量。由于updateOrCreate()方法在创建记录时将记录保存到数据库,因此$product->exists将始终返回true
另一种方法是将模型的created_atupdated_at时间戳与当前时间进行比较:

  1. if($product->created_at == Carbon::now())
  2. $created++;
  3. elseif ($product->updated_at == Carbon::now())
  4. $updated++;

相关问题