2015-07-09 15 views
6

Tôi có các kiểu máy sau; Thương hiệu, Hình ảnh và Image_size. Thương hiệu có một hình ảnh và hình ảnh có nhiều image_sizes. Tất cả các mô hình này sử dụng xóa mềm và các khía cạnh xóa là tốt. Tuy nhiên, nếu sau đó tôi muốn khôi phục một thương hiệu đã bị xóa, tôi cũng cần phải khôi phục các mô hình hình ảnh và image_size có liên quan.Laravel 5: Cách truy xuất các mô hình liên quan đã bị xóa?

Tôi đã xem xét sử dụng các sự kiện mô hình để khi mô hình thương hiệu của tôi được khôi phục, tôi có thể lấy hình ảnh và khôi phục, và sau đó tôi sẽ có một sự kiện tương tự trong mô hình hình ảnh khôi phục chúng. Tôi đang đấu tranh để có được những kỷ lục hình ảnh đã xóa mặc dù cho thương hiệu. Đây là những gì tôi có, tôi đang cố gắng để làm trong mô hình thương hiệu của tôi:

/** 
* Model events 
*/ 
protected static function boot() { 
    parent::boot(); 

    /** 
    * Logic to run before delete 
    */ 
    static::deleting(function($brand) { 
     $brand->image->delete(); 
    }); 

    /** 
    * Logic to run before restore 
    */ 
    static::restoring(function($brand) { 
     $brand = Brand::withTrashed()->with('image')->find($brand->id); 
     $brand->image->restore(); 
    }); 
} 

tôi chỉ nhận được thông báo lỗi sau trên dòng mà cố gắng để khôi phục lại hình ảnh:

Call to a member function restore() on a non-object 

Trả lời

4

Trong mã của bạn, bạn vô hiệu hóa ràng buộc xóa mềm trên truy vấn tìm nạp thương hiệu chứ không phải hình ảnh. Hãy thử các cách sau:

static::restoring(function($brand) { 
    $brand->image()->withTrashed()->first()->restore(); 
}); 

Xin lưu ý rằng không cần phải tìm nạp đối tượng thương hiệu $ khi nó được chuyển tới khôi phục tự động gọi lại.

Các vấn đề liên quan