モデルを作ってみよう。

安藤(プログラマー)
演劇もやっていまする。

前回はマイグレーションの作成をやったので、次はモデルでも作ってみようかなと。

モデル?

アプリケーションの根本的な仕様を形成するのがモデルの役割、だそうな。
モデルの構築の仕方として、大きく分けて物理モデル論理モデルの二つに分かれるそう。
詳しく書くと長くなるので、ここでは割愛します。悪しからず。

早速やってみよう。

マイグレーションと同じく、Artisanコマンドを使って、

php artisan make:model Posting

と打ちますと、app/にモデルのファイルが作られます。
最初はこんな感じかな。

namespace App;
use Illuminate\Database\Eloquent\Model;
class Posting extends Model
{
//
}

Postingというモデルクラスがありますが、その中は空っぽ。
これだと、このモデルがどのテーブルと関連しているか指定されていないように思えます。
実は、テーブル名を明示的に指定しない限り、クラス名を複数形の「スネークケース」にした名前がテーブル名として使用されることになります。
上記のままだと、postingsということになりますね。

前回、マイグレーションで用意したテーブルはpostingなので、明示的に名前を変更します。

namespace App;
use Illuminate\Database\Eloquent\Model;
class Posting extends Model
{
//モデルと関連しているテーブルの指定
protected $table = 'posting';
}

これでOK。
そして新しいレコードをDBに挿入するには、createメソッドが使えます。
使用の際は、モデルへfillableguardedのどちらかの属性を設定する必要があるので注意!

//createメソッド実行時に、入力を禁止するカラムの指定
protected $guarded = array('id');
//新規投稿処理
static function addPost($request,$target_id = 0)
{
$post = Posting::create([
'target_id' => $target_id,
'name' => $request['name'],
'comment' => $request['comment'],
'mail_address' => $request['mail_address'],
'password' => $request['password'],
]);
}

よしよし、これでaddPostの引数にフォームからのリクエスト値を入れてあげれば、DBにレコードができますね。
ついでに編集・削除機能も加えちゃいましょう。

static function editPost($id,$request)
{
Posting::query()->where('id',$id)->update([
'name' => $request['name'],
'comment' => $request['comment'],
'mail_address' => $request['mail_address'],
]);
}
static function deletePost($id,$request)
{
Posting::query()->where('id',$id)->delete();
}

これでレコードの編集・削除もOK!

最初は、フレームワークなしで掲示板制作しましたが、一度フレームワークを使っちゃうとやっぱり便利だなぁって思いますね。。
頼り切っては駄目ですが。笑
あくまで基礎を理解していて、なぜフレームワークがその仕組みになっているのかを理解できてこそ、ですね。

今回はこの辺でm(_ _)m