2013-08-28 50 views
29

Gần đây tôi đã bắt đầu sử dụng Eloquent.Làm cách nào để kiểm tra xem bản ghi có mới trong Laravel không?

Khi tôi sử dụng Bản ghi hoạt động PHP, có một hàm tốt đẹp đã kiểm tra xem bản ghi đã được tải từ cơ sở dữ liệu hay là một phiên bản mới. Có cái gì đó tương tự trong Eloquent mà tôi có thể sử dụng?

Bằng mới tôi muốn nói:

$article = new Article; 

trong khi một từ cơ sở dữ liệu sẽ

$article = Article::find(1); 

Trả lời

81

Tất cả các model laravel có một ->exists tài sản.

Cụ thể hơn nếu mô hình được tải từ cơ sở dữ liệu hoặc đã được lưu vào cơ sở dữ liệu kể từ khi được tạo thuộc tính exists sẽ là đúng; Nếu không nó sẽ là sai.

Nếu bạn muốn biết nếu mô hình đã được sửa đổi kể từ khi được lấy từ cơ sở dữ liệu, hoặc đơn giản là không được lưu ở tất cả (aka nếu nó cần lưu) thì bạn có thể sử dụng chức năng ->isDirty().

API Laravel là nơi hữu ích cho loại thông tin này: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty và thường làm sáng tỏ nhiều ánh sáng hơn tài liệu mặc định.

+33

Thật không may, tài liệu của Laravel hầu như không làm trầy xước bề mặt khung. –

+12

Không được nhầm lẫn với phương thức '$ model-> exists()', thực hiện điều gì đó khác, như đếm các hàng trong cơ sở dữ liệu và trả về nếu đếm> 0 :) –

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

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

nên

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

Tôi đang sử dụng phương pháp updateOrCreate() của Laravel Eloquent để tạo hoặc cập nhật bản ghi khi nhập từ tệp CSV.

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

Tôi muốn đếm số lượng hồ sơ mới được tạo và hồ sơ cập nhật. Vì phương thức updateOrCreate() lưu bản ghi vào cơ sở dữ liệu khi tạo, $product->exists sẽ luôn trả lại true.

Một cách khác là để so sánh created_atupdated_at timestamps của mô hình với thời gian hiện tại:

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

Chúng ta có thể sử dụng $appends trên mô hình nếu bạn sẽ sử dụng nó nhiều lần .. ví dụ để kiểm tra xem nhận xét mới được tạo sẽ được chỉnh sửa sau khi được tạo.

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

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

Bạn có thể sử dụng nó như

$comment = Comment::findOrFail(1); 

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

đối tượng Mô hình của bạn có một thuộc tính được thiết kế chính xác cho điều đó. Đó làRecentlyCreated:

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