モデルがLaravel 4.2でソフトデリートを使用しているかどうかを判断するにはどうすればよいですか?
Laravel APIで関数 isSoftDeleting() を見つけましたが、SoftDeletingTrait を使用するようになったため、Laravel 4.2 から削除されたようです。
モデルが現在論理的な削除を使用しているかどうかを判断するにはどうすればよいですか?
モデルがLaravel 4.2でソフトデリートを使用しているかどうかを判断するにはどうすればよいですか?
Laravel APIで関数 isSoftDeleting() を見つけましたが、SoftDeletingTrait を使用するようになったため、Laravel 4.2 から削除されたようです。
モデルが現在論理的な削除を使用しているかどうかを判断するにはどうすればよいですか?
モデルが論理的な削除を使用しているかどうかをプログラムで確認したい場合は、PHP 関数class_usesを使用して、モデルが論理的な削除を使用しているかどうかを判断できます。SoftDeletingTrait
// You can use a string of the class name
$traits = class_uses('Model');
// Or you can pass an instance
$traits = class_uses($instanceOfModel);
if (in_array('SoftDeletingTrait', $traits))
{
// Model uses soft deletes
}
// You could inline this a bit
if (in_array('SoftDeletingTrait', class_uses('Model')))
{
// Model uses soft deletes
}
特性が親クラスに含まれているモデルでソフト削除を検出する必要があったため、class_uses()うまくいきませんでした。代わりに、bootSoftDeletingTrait()メソッドを確認しました。次のようなもの:
// Class Name
$usesSoftDeletes = method_exists('User', 'bootSoftDeletingTrait');
また
// Model Instance
$usesSoftDeletes = method_exists($model, 'bootSoftDeletingTrait');
動作するはずです。
さて、私は自分のニーズに十分な解決策を見つけました。
まず、次のように呼び出します。
$traits = class_uses($model);
次に、softdeletingtrait を確認します
$usesSoftDeletes = in_array('Illuminate\Database\Eloquent\SoftDeletingTrait', $traits);
少なくともこの方法で、テストするモデルごとにデータベースを呼び出す必要がなくなります。後で SoftDeletingTrait の名前または場所を変更すると壊れますが...
これが最善の方法です
$model = 'App\\Models\\ModelName';
$uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));
if($uses_soft_delete) {
// write code...
}