Laravel 初期設定 DB Controller
設定内容
環境
Docker上でのLAMP環境
- mysql5.7
- phpmyadmin
- apache2.4
- PHP 8.1.11
- Laravel Framework 8.83.25
- Laravel Breeze 1系の最新版
タイムゾーン、言語設定
'timezone' => 'Asia/Tokyo', エラーメッセージなど日本語になる 'locale' => 'ja',
デバッグバー
デバッグバーいれるバージョン指定しないと最新になる
composer require barryvdh/laravel-debugbar:^3.7
インストールされるとcomposer.json
に記載される
開発環境いがいで表示されるとまずいので、
.env
のAPP_DEBUGで表示切り替えをする。
APP_NAME=Umarche APP_ENV=local APP_KEY=base64:ljSXcm/0AB383OVd+nwLt5NbwgbWthGimqfArlsoStA= APP_DEBUG=true APP_URL=http://localhost
.env
ファイルにはキャッシュがあるので、すぐ消えなかったら
php artisan cache:clear
php artisan config:clear
DB設定
DB_CONNECTION=mysql #コンテナ名 DB_HOST=mysql #内部ポートを指定 DB_PORT=3306 #データベース名 DB_DATABASE=laravel_umarche #ユーザ名 DB_USERNAME=root #パスワード DB_PASSWORD=rootroot
db: container_name: mysql image: mysql:5.7 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci environment: MYSQL_DATABASE: laravel_umarche MYSQL_USER: docker MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: rootroot TZ: Asia/Tokyo ports: - "3311:3306" volumes: - umarche_laravel:/var/lib/mysql volumes: umarche_laravel: {}
Mモデル
DBとのやりとりをPHPでかく(エロクアント)
php artisan make:model モデル名
$ php artisan make:model test INFO Model [app/Models/test.php] created successfully.
クラス名とファイル名はおなじになる
migration
DBテーブルの履歴管理
ファイル場所→databases/migrations
モデルは単数形
、migrationは複数形
で書く。
モデルがTestならtestsと複数形にする
$ php artisan make:migration create_tests_table
$ php artisan make:migration create_tests_table INFO Created migration [2022_10_29_214527_create_tests_table]. $ php artisan migrate INFO Running migrations. 2022_10_29_214527_create_tests_table ............................. 32ms DONE
migrationの当て直し
Laravelでは、1度migration(php artisan migrate)したファイルに新たに書き足したり、消したりしても、そのファイルは2度migrationされません (ロールバックした時のみ再試行される)。
もし、既存のデータベースのテーブルにカラムを追加したいのであれば、追加用のマイグレーションファイルを作る必要がある。
修正したい場合はfresh,refreshコマンドで実行し、
refreshだとロールバックがかかり、すべてのテーブルが削除されて再びmigrateされる。
$ php artisan migrate:refresh $ php artisan migrate:refresh --seed //down()メソッドを実行後up()メソッドを実行
コントローラ内でモデルを取得
php artisan make:controller OwnersController
app/Http/Controllers/ 配下に生成される
→App/Http/Controllers/OwnersController.php
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Owner; //Eloquent use Illuminate\Support\Facades\Hash; /** * Display a listing of the resource. * * @return \Illuminate\Http\Response * laravelでデータを扱う際にはcollectionを使うことが多い * →support,eloquentの2種類あるddを使ってデータの型を見ていく */ //コンストラクタでミドルウェアを設定しadminで認証していた場合実行する public function __construct() { $this->middleware('auth:admin'); } public function index() { //エロクアント $owners = Owner::all(); //クエリビルダ $owners = Owner::select('name','email','created_at','id')->paginate(3); //compact関数でView側に変数を渡すと楽 return view('admin.owners.index', compact('owners')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { //compactで渡す $owner = Owner::findOrFail($id); return view('admin.owners.edit', compact('owner')); //$thisで渡す $this->viewData['owner'] = Owner::findOrFail($id); return view('admin.owners.edit', $this->viewData); }
コントローラからviewへ
<?php @foreach ($owners as $owner) <tr> <td class="md:px-4 py-3">{{ $owner->name }}</td> <td class="md:px-4 py-3">{{ $owner->email }}</td> <td class="md:px-4 py-3">{{ $owner->created_at->diffForHumans() }}</td> <td class="md:px-4 py-3"> {{-- <input name="plan" type="radio"> --}} <button onclick="location.href='{{ route('admin.owners.edit', ['owner' => $owner->id ])}}'" class="text-white bg-indigo-400 border-0 py-2 px-4 focus:outline-none hover:bg-indigo-500 rounded">更新</button> </td> <form id="delete_{{$owner->id}}" method="post" action="{{ route('admin.owners.destroy', ['owner' => $owner->id ])}}"> @csrf @method('delete'); <td class="px-4 py-3"> <a href='#' data-id="{{ $owner->id }}" onclick="deletePost(this)" class="text-white bg-red-400 border-0 py-2 px-4 focus:outline-none hover:bg-red-500 rounded">削除</a> </td> </form> </tr> @endforeach