如何复制软删除功能?

时间:2017-06-28 17:28:07

标签: laravel laravel-5 laravel-5.3

我在表格中创建了一个名为finished_at的自定义日期列。我想复制soft deleting的功能,以便:

  1. 默认情况下,系统不会检索NULL列的finished_at值的行。
  2. 如果我想要检索NULL值的行,我会在查询中添加withFinished()(就像软删除withTrashed()的方式一样)。
  3. 我该怎么做?

2 个答案:

答案 0 :(得分:1)

在模型类中,使用SoftDeletes特征并定义常量以告诉laravel自定义软删除列名称。

class MyModel extends Model
{
    use SoftDeletes;
    const DELETED_AT = 'finished_at';
    .....
} 

如果您想使用withFinished代替withTrashed,您可以创建自己的CustomSoftDeletes特征,并在其中使用Laravel的SoftDeletes特征。然后创建withFinished来依次调用withTrashed。但我不明白为什么你需要重命名该方法,因为它只是一个实现细节。

答案 1 :(得分:0)

您需要更改Model之类的内容:

use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    use SoftDeletes; //<--- use the softdelete traits

    protected $dates = ['finished_at']; //<--- new field to be added in your table

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'test';

}