プロジェクト作成
composer create-project laravel/laravel プロジェクト名
Dockerの場合
curl -s "https://laravel.build/プロジェクト名?with=mysql,mailpit" | bash
サーバー立ち上げ
php artisan serve
sail up -d
サーバーダウン
sail down
Modelの作成
php artisan make:model モデル名 --migration
Dockerの場合(マイグレーションファイルも一緒に作る)
sail artisan make:model モデル名 --migration
マイグレーションファイルの作成及びカラムの追加
php artisan make:migration マイグレーションファイル名
Dockerの場合
sail artisan make:migration マイグレーションファイル名
カラム追加
データ型一覧
https://qiita.com/Otake_M/items/3c761e1a5e65b04c6c0e
https://qiita.com/Takahiro_Nago/items/51eb0e9f1c8bbc2c9852
increments('id') ... 「符号なしINT」を使用した自動増分ID(主キー)
binary('カラム名') ... バイナリデータカラム
boolean('カラム名') ... 真偽値カラム
char('カラム名', 長さ) ... 長さを指定する文字列カラム
date('カラム名') ... 日付カラム
time('カラム名') ... 時間カラム
dateTime(カラム名) ... 日時カラム
double('カラム名', 桁数, 小数点以下桁数) ... ○桁で小数点以下×桁の小数カラム
enum('カラム名', ['定数', '定数']) ... ENUMカラム
integer('カラム名') ... 数値データカラム
json('カラム名') ... JSONフィールドカラム
timestamp('カラム名') ... TIMESTAMPカラム
timestamps() ... created_atとupdate_atカラム
nullableTimestamps() ... NULL値を許す以外、timestamps()と同じ
string('カラム名') ... VARCHARカラム
string('カラム名', 長さ) ... 長さ指定のVARCHARカラム
text('カラム名') ... TEXTカラム
$table->データ型('カラム名');
$table->string('title');
$table->string('image');
$table->text('body');
$table->timestamps(); // `created_at`と`updated_at`を追加
テーブル名変更
migrate実行
php artisan migrate
Dockerの場合
sail artisan migrate
コントローラー作成(頭文字は大文字)
php artisan make:controller コントローラ名Controller
7つのアクション(index,store,create,show,edit,update,destroy)を使いたい時は以下のコマンド
sail artisan make:controller コントローラー名Controller -r
DB取得
controllerアクション名
public function アクション名()
{
処理
}
routesの設定
Route::get('パス',[コントローラー名::class, 'アクション名']);
Route::get('/users/{id}',[RequestSampleController::class, 'profile'])->name(name:'profile');
resourcesを使う場合
Route::resource('パス', コントローラー名::class)-> only(['使うアクション名']);
Route::resource('/events', EventController::class)-> only(['index', 'create', 'store']);
Httpメソッドの種類
HTTPメソッド CRUD
GET Read。レコード取得
POST Create。レコード新規作成
PUT Update。レコード更新
DELETE Delete。レコード削除
https://qiita.com/oouaioi/items/aec09289e49d87b7ed61
viewでPHPを書く場合
表示する時
{{$title}}
表示させない場合
@if
@endif
バリデーション
ルール一覧
https://qiita.com/fagai/items/9904409d3703ef6f79a2
https://appdev-room.com/php-laravel-validation-rule
php artisan make:request バリデーション名
Dockerの場合
sail artisan make:request バリデーション名Request
例
sail artisan make:request BlogRequest
2.authorizeメソッドのreturnをtrueに変更
3.rulesメソッドにバリデーションを記述
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'name_kana' => ['required', 'string', 'max:255', 'regex:/^[ァ-ロワンヴー]*$/u'],
'phone' => ['nullable', 'regex:/^0(\d-?\d{4}|\d{2}-?\d{3}|\d{3}-?\d{2}|\d{4}-?\d|\d0-?\d{4})-?\d{4}$/'],
'email' => ['required', 'email'],
'body' => ['required', 'string', 'max:2000'],
];
}
4.controllerにuse文を追加
use App\Http\Requests\BlogRequest;
5.モデルに$fillable
プロパティを追記
protected $fillable = [
'title',
'body'
];
バリデーションメッセージ日本語化
1..envのAPP_LOCALEをjaに変更
2.以下のgithubにアクセス
https://github.com/Laravel-Lang/lang/tree/10.9.5
3.ダウンロード後にファイルのlocalesをクリックしてjaを選択
4.langというディレクトリを作りその中にファイルをドラッグしてコピーする
5.追加したい時はvalidation.phpに以下のようにattributesを使って追加する
'attributes' => [
'name' => '名前',
'name_kana' => '名前(フリガナ)',
'phone' => '電話番号',
'email' => 'メールアドレス',
'body' => '本文'
]
エラー表示
@if ($errors->any())
<div>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
リンクボタン
<a href="{{ route('blogs.create') }}">ブログ投稿</a>
入力フォーム
画像を送信しない時はenctype="multipart/form-data"を消す
<form action="{{ route('content')}}" method="post" enctype="multipart/form-data">
@csrf
<label for="phone_label" class="phone_label">電話番号</label>
<input id="phone_number" class="phone_number" type="text" placeholder="例)0312345678" name="phone" >
<button type="submit">送信</button>
</form>
メールの自動送信(Mailableで作る)
メッセージ付きリダイレクト
return to_route('admin.blogs.index')->with('success', 'ブログを投稿しました');
リレーション(1対多 usersテーブルとblogsテーブルの場合)
1.マイグレーションファイルを準備し、外部キーをセットする
Schema::create('blogs', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id'); // 外部キー用のカラム
$table->string('title');
$table->text('content');
$table->timestamps();
// 外部キー制約を追加
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
2.migrateを実行する
3.Blogモデルの作成: 以下のコマンドでBlogモデルを作成します。
php artisan make:model Blog
3.親モデルにhasManyを書く(今回の場合はUser.php)
public function blogs()
{
return $this->hasMany(Blog::class);
}
4.子モデルにbelongsToを書く(今回の場合はBlog.php)
public function user()
{
return $this->belongsTo(User::class);
}
リレーション(多対多 usersテーブルとblogsテーブルの間にfavoritesテーブルを作る場合)
1.マイグレーションファイルの準備 中間テーブル用のマイグレーションファイルを作成します。
php artisan make:migration create_favorites_table
2.中間テーブルのマイグレーション設定 作成したマイグレーションファイルを以下のように編集します。
Schema::create('favorites', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id'); // 外部キー
$table->unsignedBigInteger('blog_id'); // 外部キー
$table->timestamps();
// 外部キー制約を追加
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('blog_id')->references('id')->on('blogs')->onDelete('cascade');
// ユニーク制約を追加(同じユーザーとブログの組み合わせを防ぐ)
$table->unique(['user_id', 'blog_id']);
});
3.マイグレーションの実行
4.UserモデルにbelongsToManyを書く User.phpモデルに以下を追加します。
public function favorites()
{
return $this->belongsToMany(Blog::class, 'favorites');
}
5.BlogモデルにbelongsToManyを書く Blog.phpモデルに以下を追加します。
public function users()
{
return $this->belongsToMany(User::class, 'favorites');
}