Подтвердить что ты не робот

Как проверить, является ли запись новой в Laravel?

Недавно я начал использовать Eloquent.

Когда я использовал PHP Active Record, была хорошая функция, которая проверяла, была ли запись загружена из базы данных или является новым экземпляром. Есть ли что-то подобное в Eloquent, которое я мог бы использовать?

Под новым я имею в виду:

$article = new Article;

тогда как один из базы данных будет

$article = Article::find(1);
4b9b3361

Ответ 1

Все модели laravel имеют свойство ->exists.

Более конкретно, если модель либо загружается из базы данных, либо была сохранена в базе данных, так как при создании свойство exists будет истинным; В противном случае это будет неверно.

Если вы хотите узнать, была ли изменена модель после захвата из базы данных или просто не была сохранена вообще (например, если она требует сохранения), вы можете использовать функцию ->isDirty().

API Laravel - полезное место для такого рода информации: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty  и часто пропускает гораздо больше света, чем документация по умолчанию.

Ответ 2

У вашего объекта модели есть атрибут, специально предназначенный для этого. Это было исправлено:

$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
}

Ответ 3

Мы можем использовать $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
}

Ответ 4

Я использую Laravel Eloquent метод updateOrCreate() для создания или обновления записей при импорте из файла CSV.

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

Я хотел подсчитать количество вновь созданных записей и обновленных записей. Поскольку метод updateOrCreate() сохраняет запись в базу данных при создании, $product->exists всегда будет возвращать true.

Альтернативой является сравнение временных меток created_at и updated_at модели с текущим временем:

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

Ответ 5

$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
}