php-誤って挿入されないように$guarded= ['id']を明示的に定義しますか?
次のロジックをすべてのModelクラスに適用したいとします。
自動インクリメンタルIDを持つすべてのModelクラスには、
が必要です。protected $guarded = ['id']
誤ってインクリメンタルIDを自分で挿入しないようにするためです。
Laravel 5では意味がありますか?
各Modelクラスでprotected $guarded = ['id']
を設定する以外に、それを実現する他の方法はありますか?
答え :
解決策:
受け入れられた回答に従えば、まだ手動でid
を設定できます。実際、私は実際には、その答えはアプリケーションのセキュリティを悪化させると言うでしょう。
Laravelはすでにすべてをデフォルトで保護しています:
protected $guarded = ['*'];
その結果、すでに保護されている場合は、 id
を指定する必要はありません。そのプロパティを上書きするときは、「実際には、すべてを保護するのではなく、指定したプロパティのみを保護する」とLaravelに伝えています。つまり、基本的に、他のプロパティの保護を解除していることになります。
また、次のようなプロパティを手動で割り当てる場合:
$model=新しいモデル;
$ model-> id = 1;
$ model-> name='例';
$ model-> save();
$guarded
/ $fillable
プロパティは起動しません。{-codeなどのメソッドを使用すると起動します。 -7}
、 update
、 fill
など
答え :
解決策:
はい、それでもそうすることは理にかなっています。 IDはデフォルトでは入力できませんが、 $ model-> id = $ id ;
で直接変更すると、上書きされる可能性があります。より良い方法は、すべてのモデルの基本クラスを定義し、そこに $ guardedプロパティを設定することです。この方法では、これを1回だけ実行する必要があります。
//Model.php
<?php namespace Your\Model\Namespace;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Model extends Eloquent {
protected $guarded = ['id'];
}
//SomeModel.php
<?php namespace Your\Model\Namespace;
class SomeModel extends Model {}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。