【Laravel】fillメソッドよってmodelの複数カラム一括セットする

プログラミング

 Laravelでモデルの複数カラムを一気にセットしたいとき、fill()メソッドを使うと便利です。
入力フォームのname属性をカラム名と同じにしておくと、「$model->fill($request->all())」とするだけで一気にセットできます。

 ということを、上記の記事でさらっと紹介したのですが、「laravel fill」「laravel fill model」といったキーワードで訪問される方がいらっしゃいましたので、モデルの複数カラムを一気にセットする方法を記事にしました。

スポンサーリンク

一気にセットする対象のモデル

 下記のモデルを例に解説します。

カラム名
name
email
password
Userモデル(App/Model/User)

完成形

 最初に完成形をご紹介します。

入力フォーム

<form action="/register" method="POST">
  @csrf
  <input type="text" name="name">
  <input type="text" name="email">
  <input type="text" name="password">
</form>

コントローラー

<?
use App\Model\User ;
public function register(Request $request)
{
  $user = new User;

   $user->fill($requesst->all()) ;
}

以降、順を追って解説します。

入力フォーム

 モデルの複数カラムを一気にセットするためには、form内のinputエレメントのname属性の値を、カラム名と同じ値にします。

 Userモデルの各カラムは「name」「email」「password」なので、name属性「name」「email」「password」のinputエレメントを用意します。

<form action="/register" method="POST">
  @csrf
  <input type="text" name="name">
  <input type="text" name="email">
  <input type="text" name="password">
</form>

コントローラー

値セット方法の基本

 モデルへの登録は、コントローラーに記述します。

 inputエレメントの値は、下記のように$request->{name属性の値}でアクセスができます。

$request->name ;
$request->email ;
$request->password ;

  また、モデルの各カラムは、下記のように${モデルオブジェクトの変数名}->{カラム名}でアクセスができます。

<?
use App\Model\User ;
public function register(Request $request)
{
  $user = new User;
  /**
   * User
   * @param id
   * @param name
   * @param email
   * @param password
   */

   $user->name = "名前" ;
   $user->email => "mailaddress@example.com" ;
   $user->password => "password" ;
   ]) ;
}

 したがって、モデルの各カラムにinputエレメントの各値をセットするのは、下記のように記載することで実現できます。

<?
use App\Model\User ;
public function register(Request $request)
{
  $user = new User;
  /**
   * User
   * @param id
   * @param name
   * @param email
   * @param password
   */

   $user->name = $request->name ;
   $user->email => $request->email ;
   $user->password => $request->password ;
   ]) ;
}

モデルの各カラムへの一括セット(1)

 モデルに値を一括でセットするためには、fillメソッドを使用します。

<?
use App\Model\User ;
public function register(Request $request)
{
  $user = new User;
  /**
   * User
   * @param id
   * @param name
   * @param email
   * @param password
   */

   $user->fill([
       'name' => $request->name,
       'email' => $request->email,
       'password' => $request->password
   ]) ;
}

モデルの各カラムへの一括セット(2)

 すべてのinputエレメントの名前がモデルのカラム名と同じだと、$request->all()を利用することで一括セットできます。

<?
use App\Model\User ;
public function register(Request $request)
{
  $user = new User;
  /**
   * User
   * @param id
   * @param name
   * @param email
   * @param password
   */

   $user->fill($requesst->all()) ;
}

まとめ

 入力フォームのname属性の工夫が必要ですが、ソースコードにカラム名を記載しなくなるため、モデルの拡張にコントローラーが影響しなくなるメリットがあります。

以上、参考になればうれしいです。

タイトルとURLをコピーしました