ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本
php artisan make:model Post
INFO Model [app/Models/Post.php] created successfully.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
}
Laravel 8 以降は app/Models/ に作られます。7 以前は app/ 直下だったため、古い記事のパスと違う点に注意してください。
オプション一覧
| オプション | 一緒に作られるもの |
|---|---|
-m / --migration | マイグレーション |
-c / --controller | コントローラー |
-r / --resource | リソースコントローラー(-c と併用) |
-f / --factory | ファクトリ(テストデータ生成用) |
-s / --seed | シーダー |
-R / --requests | フォームリクエスト(-c と併用) |
-p / --policy | ポリシー(認可) |
--pivot | 中間テーブル用のモデル |
--all | 上のほぼ全部 |
--force | 同名があっても上書きする |
php artisan make:model Post -m # よく使う(モデル + マイグレーション)
php artisan make:model Post -mcr # + リソースコントローラー
php artisan make:model Post -mfs # + ファクトリ + シーダー
php artisan make:model Post --all # 一式まとめて
# 短縮形はまとめて書ける
php artisan make:model Post -a # --all と同じ
app/Models/Post.php
app/Http/Controllers/PostController.php
app/Http/Requests/StorePostRequest.php
app/Http/Requests/UpdatePostRequest.php
app/Policies/PostPolicy.php
database/factories/PostFactory.php
database/migrations/2026_09_07_120000_create_posts_table.php
database/seeders/PostSeeder.php
名前の付け方とテーブル名
| モデル名 | 自動で使われるテーブル名 |
|---|---|
Post | posts |
BlogPost | blog_posts |
Category | categories |
Person | people |
News | news |
Laravel は英語の複数形ルールで変換します。日本語のローマ字(Shohin → shohins)や不規則な名前では意図と違うテーブル名になるため、その場合は明示します。
class Post extends Model
{
protected $table = 'blog_entries'; // テーブル名を指定
protected $primaryKey = 'post_id'; // 主キーが id でない場合
public $incrementing = false; // 主キーが自動採番でない場合
protected $keyType = 'string'; // 主キーが数値でない場合
public $timestamps = false; // created_at / updated_at が無い場合
}
サブディレクトリに作る
php artisan make:model Blog/Post -m
// app/Models/Blog/Post.php
namespace App\Models\Blog; // 名前空間も自動で付く
class Post extends Model
{
protected $table = 'posts'; // ← サブディレクトリ名はテーブル名に影響しないが
} // 名前空間を含めた推測になるため明示すると確実
生成した直後にやること
class Post extends Model
{
use HasFactory;
// 1. 一括代入を許可するカラム(これが無いと create() が値を無視する)
protected $fillable = ['title', 'body', 'published_at'];
// 2. 型変換
protected $casts = [
'published_at' => 'datetime',
'is_public' => 'boolean',
'meta' => 'array',
];
// 3. JSON に出したくないカラム
protected $hidden = ['secret_token'];
// 4. リレーション
public function user()
{
return $this->belongsTo(User::class);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
$fillable を設定しないと Post::create([...]) で次のエラーになります。
Add [title] to fillable property to allow mass assignment on [App\Models\Post].
対処は Add [~] to fillable property to allow mass assignment を参照してください。$fillable と $guarded の使い分けは $fillable $guarded $hiddenの説明 にまとめています。
マイグレーションを書いて反映する
// database/migrations/xxxx_create_posts_table.php
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('title');
$table->text('body')->nullable();
$table->timestamp('published_at')->nullable()->index();
$table->timestamps();
});
}
php artisan migrate
動作確認
php artisan tinker
>>> App\Models\Post::count()
=> 0
>>> $p = App\Models\Post::create(['title' => 'テスト', 'body' => '本文']);
>>> $p->id
=> 1
>>> App\Models\Post::first()->title
=> "テスト"
>>> (new App\Models\Post)->getTable() # 実際に使われるテーブル名
=> "posts"
getTable() でLaravel が推測したテーブル名を確認できます。Base table or view not found が出るときはここを見てください。
関連するコマンド
php artisan make:migration add_status_to_posts_table --table=posts
php artisan make:controller PostController --resource --model=Post
php artisan make:factory PostFactory --model=Post
php artisan make:seeder PostSeeder
php artisan make:policy PostPolicy --model=Post
php artisan make:observer PostObserver --model=Post
php artisan model:show Post # 属性・リレーション・キャストを一覧表示(Laravel 10 以降)
つまずきやすい点
| 症状 | 原因 |
|---|---|
Class "App\Models\Post" not found | 名前空間の書き忘れ。composer dump-autoload も試す |
Base table or view not found | テーブル名の推測ずれ。$table を明示する |
create() しても値が入らない | $fillable が未設定 |
モデル名を複数形(Posts)にした | テーブル名が posts にならない。単数形にする |
| すでにあるモデルを作り直したい | --force(中身が消えるので注意) |
モデル側の書き方(フィールド定義・リレーション・スコープ)は モデルの作成 と Eloquentモデル (ORM) で詳しく扱っています。
関連
- コマンド一覧 — 親カテゴリ
- モデルの作成 — モデルの中身の書き方
- Eloquentモデル (ORM)
- マイグレーションファイルの作成
- マイグレーションの実行(migrate)
- テーブルの紐づけ
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?