テーブルにdeleted_atカラムを追加するソフトデリート機能を有効にできると思いますが、
このカラム名を**delete_flag(1=削除)**のように独自のカラムに変更することは可能でしょうか?
既にdelete_flagが使用されているのでカラム名をdeleted_at置き換えるというのは難しい状況です。
調べても公式ドキュメントにも記載されていませんし、そのような記事も見つけられなかったので質問させてください。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
下記の様にtraitをオーバーライドしてみては如何でしょうか?
ざっと検証した限りでは、問題なく稼働している様に思いますが…
Model
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Database\Eloquent\SoftDeletes; 7 8 9class testTable extends Model 10{ 11 use SoftDeletes; 12 protected $table = 'testTable'; 13 public $timestamps = false; 14 15 /** 16 * ソフトデリートの判定カラムを上書き 17 * @return string 18 */ 19 public function getDeletedAtColumn(): string 20 { 21 return 'delete_flg'; 22 } 23 /** 24 * 25 * @return void 26 */ 27 public function runSoftDelete() 28 { 29 $query = $this->newQueryWithoutScopes()->where($this->getKeyName(), $this->getKey()); 30 31 $time = $this->freshTimestamp(); 32 33 //$columns = [$this->getDeletedAtColumn() => $this->fromDateTime($time)]; 34 $columns = [$this->getDeletedAtColumn() => true]; 35 36 //$this->{$this->getDeletedAtColumn()} = $time; 37 $this->{$this->getDeletedAtColumn()} = true; 38 39 if ($this->timestamps && ! is_null($this->getUpdatedAtColumn())) { 40 $this->{$this->getUpdatedAtColumn()} = $time; 41 42 $columns[$this->getUpdatedAtColumn()] = $this->fromDateTime($time); 43 } 44 45 $query->update($columns); 46 } 47} 48
migrate
php
1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class TestTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('testTable', function (Blueprint $table) { 17 $table->increments('id'); 18 $table->string('name'); 19 $table->boolean('delete_flg')->nullable(); 20 }); 21 } 22 23 /** 24 * Reverse the migrations. 25 * 26 * @return void 27 */ 28 public function down() 29 { 30 Schema::dropIfExists('testTable'); 31 } 32}
投稿2018/02/26 07:09
総合スコア3027
0
SoftDeletesトレートのソースです。
https://github.com/laravel/framework/blob/5.5/src/Illuminate/Database/Eloquent/SoftDeletes.php
論理削除に使うカラム名は内部的にgetDeletedAtColumn
メソッドで取得していますが
PHP
1public function getDeletedAtColumn() 2{ 3 return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at'; 4}
論理削除を使うモデルに、DELETED_AT
というオブジェクト定数が定義されていればそれを使い、
定義されていなければdeleted_at
を使うという実装になっています。
なので、論理削除を使うモデルに定数追加でいけそうです(すいませんが手元で試せてはいません)
PHP
1const DELETED_AT = 'delete_flag';
投稿2018/02/25 03:30
編集2018/02/25 04:04総合スコア452
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/02/25 03:38

退会済みユーザー
2018/02/25 04:11
2018/02/26 02:49 編集

0
以前似たようなことに遭遇したときの解法です。
ご参考までにどうぞ。
https://qiita.com/sh-ogawa/items/8c1e9beee7c19be99862
投稿2018/03/09 03:28
総合スコア43
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
回答者の方々からのご意見をいただき、私のスキルでは、結構時間がかかりそうかつ、プロダクションでの動作を保証できかねると判断したため、当該機能を見送ることとしました。
ご回答くださった方、本当にありがとうございました。みなさんの考え方について今後の何かの参考にさせていただきます。
投稿2018/03/20 16:20

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。