2017-02-05 1 views
3

Я знаю, что я могу использовать функцию Soft Deleting для моделей в laravel. как это:Использовать пользовательскую мягкую удаленную колонку в laravel

class Flight extends Model 
{ 
    use SoftDeletes; 

    protected $dates = ['deleted_at']; 
} 

Но я хочу использовать пользовательский столбец с именем sender_deleted_at для этой функции, где все связанные с ним методы, такие как forceDelete, restore, withTrashed и т.д. работы на основе этого столбца.

Я написал this Question Но я не мог получить правильный ответ.

Я использую Laravel 5.3.

ответ

7

SoftDeletes черта использует этот код, чтобы "удалить" строку:

protected function runSoftDelete() { 
     $query = $this->newQueryWithoutScopes()->where($this->getKeyName(), $this->getKey()); 
     $this->{$this->getDeletedAtColumn()} = $time = $this->freshTimestamp(); 
     $query->update([$this->getDeletedAtColumn() => $this->fromDateTime($time)]); 
} 

Тело getDeletedAtColumn() является:

public function getDeletedAtColumn() { 
    return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at'; 
} 

Таким образом, вы можете сделать это:

class Flight extends Model 
{ 
    use SoftDeletes;  
    protected $dates = ['my_deleted_at']; 
    const DELETED_AT = 'my_deleted_at'; 
} 
4

Краткая Ответ: Просто объявите const DELETED_AT в вашей модели и укажите название колонки, которую вы хотите использовать.

<?php 

namespace App; 

use Illuminate\Database\Eloquent\SoftDeletes; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use SoftDeletes; 

    use Notifiable; 

    const DELETED_AT = 'deletedAt'; 
} 

Объяснение: Ну, если вы посмотрите на методе getDeletedAtColumn в trait Illuminate\Database\Eloquent\SoftDeletes

/** 
* Get the name of the "deleted at" column. 
* 
* @return string 
*/ 
public function getDeletedAtColumn() 
{ 
    return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at'; 
} 

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

+0

Спасибо для вашего ответа, но я не понял, что такое 'static :: DELETED_AT'. достаточно ли изменить термин 'deleted_at' на мое имя? –

+0

Это объявление константы в классе, которые содержат столбец namr – rummykhan