我最近开始使用Eloquent。当我使用PHP Active Record时,有一个很好的函数可以检查记录是从数据库加载的还是一个新示例。有没有类似的东西在雄辩中,我可以使用?新的意思是:
$article = new Article;
而数据库中的一个则是
$article = Article::find(1);
ar7v8xwq1#
所有laravel模型都有一个->exists属性。更具体地说,如果模型是从数据库加载的,或者在创建后已经保存到数据库中,则exists属性将为true;否则它将是假的。如果你想知道模型从数据库中抓取后是否被修改过,或者根本没有保存(如果需要保存),那么你可以使用->isDirty()函数。Laravel API是一个有用的地方,可以提供这类信息:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty,并且通常比默认文档提供更多的信息。
->exists
exists
->isDirty()
zujrkrfu2#
您的模型对象有一个专门为此设计的属性。它是最近创建的:
$item = Item::firstOrCreate(['title' => 'Example Item']); if ($item->wasRecentlyCreated === true) { // item wasn't found and have been created in the database } else { // item was found and returned from the database }
有关exists变量与wasRecentlyCreated变量的工作方式之间的更多说明(从下面CJ Dennis的评论中复制)
/* Creating a model */ $my_model = new MyModel; $my_model->exists === false; $my_model->wasRecentlyCreated === false; $my_model->save(); $my_model->exists === true; $my_model->wasRecentlyCreated === true;
与从先前的请求加载模型相反:
/* Loading a Model */ $my_model = MyModel::first(); $my_model->exists === true; $my_model->wasRecentlyCreated === false;
wnavrhmk3#
我们可以在模型上使用$appends,如果你会使用它很多次。例如检查新创建的评论在创建后是否被编辑。
$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 }
2guxujil4#
$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 }
zi8p0yeb5#
在Laravel中,如果一条记录是新创建的,并且之前没有更新过,那么created_at和updated_at将是相同的。
if($article->created_at == $article->updated_at) { // Logic goes here }
mm5n2pyu6#
我使用Laravel Eloquent的updateOrCreate()方法在从CSV文件导入时创建或更新记录。
$product = $this->updateOrCreate($attributes, $values);
我想计算新创建的记录和更新的记录的数量。由于updateOrCreate()方法在创建记录时将记录保存到数据库,因此$product->exists将始终返回true。另一种方法是将模型的created_at和updated_at时间戳与当前时间进行比较:
updateOrCreate()
$product->exists
true
created_at
updated_at
if($product->created_at == Carbon::now()) $created++; elseif ($product->updated_at == Carbon::now()) $updated++;
6条答案
按热度按时间ar7v8xwq1#
所有laravel模型都有一个
->exists
属性。更具体地说,如果模型是从数据库加载的,或者在创建后已经保存到数据库中,则
exists
属性将为true;否则它将是假的。如果你想知道模型从数据库中抓取后是否被修改过,或者根本没有保存(如果需要保存),那么你可以使用
->isDirty()
函数。Laravel API是一个有用的地方,可以提供这类信息:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty,并且通常比默认文档提供更多的信息。
zujrkrfu2#
您的模型对象有一个专门为此设计的属性。它是最近创建的:
有关exists变量与wasRecentlyCreated变量的工作方式之间的更多说明(从下面CJ Dennis的评论中复制)
与从先前的请求加载模型相反:
wnavrhmk3#
我们可以在模型上使用
$appends
,如果你会使用它很多次。例如检查新创建的评论在创建后是否被编辑。此时你是用它时
2guxujil4#
所以
zi8p0yeb5#
在Laravel中,如果一条记录是新创建的,并且之前没有更新过,那么created_at和updated_at将是相同的。
mm5n2pyu6#
我使用Laravel Eloquent的updateOrCreate()方法在从CSV文件导入时创建或更新记录。
我想计算新创建的记录和更新的记录的数量。由于
updateOrCreate()
方法在创建记录时将记录保存到数据库,因此$product->exists
将始终返回true
。另一种方法是将模型的
created_at
和updated_at
时间戳与当前时间进行比较: