web-dev-qa-db-ja.com

EloquentモデルでRequest-> all()を使用する方法

着信JSONリクエストを保存する必要があるLumenアプリケーションがあります。このようなコードを書いた場合:

public function store(Request $request)
  {
    if ($request->isJson())
    {
      $data = $request->all();

      $transaction = new Transaction();
      if (array_key_exists('amount', $data))
        $transaction->amount = $data['amount'];
      if (array_key_exists('typology', $data))
        $transaction->typology = $data['typology'];

      $result = $transaction->isValid();
      if($result === TRUE )
      {
        $transaction->save();
        return $this->response->created();
      }

      return $this->response->errorBadRequest($result);
    }

    return $this->response->errorBadRequest();
  }

それは完全に動作します。ただし、モデルに挿入するためにすべての入力フィールドをチェックする必要があるため、そのモードでRequestを使用するのは退屈です。モデルにリクエストを送信する高速な方法はありますか?

8
user3914418

Eloquentモデルに質量を割り当てることができますが、最初に、質量を割り当て可能にするモデルのフィールドを設定する必要があります。モデルで、_$fillable_配列を設定します。

_class Transaction extends Model {
    protected $fillable = ['amount', 'typology'];
}
_

これにより、amountおよびtypologyを一括で割り当て可能になります。つまり、配列を受け入れるメソッド(コンストラクターやfill()メソッドなど)を介してそれらを割り当てることができます。

コンストラクターの使用例:

_$data = $request->all();
$transaction = new Transaction($data);

$result = $transaction->isValid();
_

fill()の使用例:

_$data = $request->all();
$transaction = new Transaction();
$transaction->fill($data);

$result = $transaction->isValid();
_
14
patricus

fillメソッドまたはconstructorを使用できます。最初に、モデルのfillableプロパティにすべての質量割り当て可能なプロパティを含める必要があります

方法1(コンストラクターを使用)

$transaction = new Transaction($request->all());

方法2(fillメソッドを使用)

$transaction = new Transaction();
$transaction->fill($request->all());
6
chanafdo