Laravel Soft Delete posts

后端 未结 6 2165
鱼传尺愫
鱼传尺愫 2020-12-08 10:42

in our project we must be use soft delete for each posts. in laravel document i think we can only use this feature for tables.

can we use that f

相关标签:
6条回答
  • 2020-12-08 11:09

    You actually do the normal delete. But on the model you specify that its a softdelete model.

    So on your model add the code:

    class Contents extends Eloquent {
    
        use SoftDeletingTrait;
    
        protected $dates = ['deleted_at'];
    
    }
    

    Then on your code do the normal delete like:

    $id = Contents::find( $id );
    $id ->delete();
    

    Also make sure you have the deleted_at column on your table.

    Or just see the docs: http://laravel.com/docs/eloquent#soft-deleting

    0 讨论(0)
  • 2020-12-08 11:10

    In Laravel 5.5 Soft Deleted works ( for me ).

    Data Base

    deleted_at Field, default NULL value

    Model

    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class User extends Model {
        use SoftDeletes;
    }
    

    Controller

    public function destroy($id)
    {
        User::find($id)->delete();
    }
    
    0 讨论(0)
  • When soft deleting a model, it is not actually removed from your database. Instead, a deleted_at timestamp is set on the record. To enable soft deletes for a model, specify the softDelete property on the model (Documentation) :

    Prior to Version 4.2 (But not 4.2 & Later)

    For example (Using a posts table and Post model):

    class Post extends Eloquent {
    
        protected $table = 'posts';
        protected $softDelete = true;
    
        // ...
    }
    

    To add a deleted_at column to your table, you may use the softDeletes method from a migration:

    For example (Migration class' up method for posts table) :

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function(Blueprint $table)
        {
            $table->increments('id');
            // more fields
            $table->softDeletes(); // <-- This will add a deleted_at field
            $table->timeStamps();
        });
    }
    

    Now, when you call the delete method on the model, the deleted_at column will be set to the current timestamp. When querying a model that uses soft deletes, the "deleted" models will not be included in query results. To soft delete a model you may use:

    $model = Contents::find( $id );
    $model->delete();
    

    Deleted (soft) models are identified by the timestamp and if deleted_at field is NULL then it's not deleted and using the restore method actually makes the deleted_at field NULL. To permanently delete a model use forceDelete method.

    Updated Version (Version 4.2):

    use Illuminate\Database\Eloquent\SoftDeletingTrait; // <-- This is required
    
    class Post extends Eloquent {
    
        use SoftDeletingTrait; // <-- Use This Insteaf Of protected $softDelete = true;
    
        protected $table = 'posts';
    
        // ...
    }
    

    Updated Version (Version 5.0 & Later):

    use Illuminate\Database\Eloquent\SoftDeletes; // <-- This is required
    
    class Post extends Eloquent {
    
        use SoftDeletes; // <-- Use This Instead Of SoftDeletingTrait
    
        protected $table = 'posts';
    
        // ...
    }
    
    0 讨论(0)
  • 2020-12-08 11:25

    Here is the details from laravel.com

    http://laravel.com/docs/eloquent#soft-deleting

    When soft deleting a model, it is not actually removed from your database. Instead, a deleted_at timestamp is set on the record. To enable soft deletes for a model, specify the softDelete property on the model:

    class User extends Eloquent {
    
        protected $softDelete = true;
    
    }
    

    To add a deleted_at column to your table, you may use the softDeletes method from a migration:

    $table->softDeletes();
    

    Now, when you call the delete method on the model, the deleted_at column will be set to the current timestamp. When querying a model that uses soft deletes, the "deleted" models will not be included in query results.

    0 讨论(0)
  • 2020-12-08 11:26

    Just an update for Laravel 5:

    In Laravel 4.2:

    use Illuminate\Database\Eloquent\SoftDeletingTrait;    
    class Post extends Eloquent {
    
        use SoftDeletingTrait;
    
        protected $dates = ['deleted_at'];
    
    }
    

    becomes in Laravel 5:

    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class User extends Model {
    
        use SoftDeletes;
        protected $dates = ['deleted_at'];
    
    0 讨论(0)
  • 2020-12-08 11:29

    In the Latest version of Laravel i.e above Laravel 5.0. It is quite simple to perform this task. In Model, inside the class just write 'use SoftDeletes'. Example

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class User extends Model
    {
        use SoftDeletes;
    }
    

    And In Controller, you can do deletion. Example

    User::where('email', 'youremail@example.com')->delete();
    

    or

    User::where('email', 'youremail@example.com')->softDeletes();
    

    Make sure that you must have 'deleted_at' column in the users Table.

    0 讨论(0)
提交回复
热议问题