0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelチートシート(自分用)

Last updated at Posted at 2024-10-26

プロジェクト作成

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');
}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?