モデルを作ってみよう。

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

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

モデル?

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

早速やってみよう。

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

1
php artisan make:model Posting

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

1
2
3
4
5
6
7
8
namespace App;

use Illuminate\Database\Eloquent\Model;

class Posting extends Model
{
    //
}

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

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

1
2
3
4
5
6
7
8
9
namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//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にレコードができますね。
ついでに編集・削除機能も加えちゃいましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
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