Laravel Webアプリケーション ch5 データベース
5 マイグレーション
DBのテーブル作成や定義を管理する機能
5-1-2 マイグレーションの作成
php artisan make:migration create_xxx_table
- Upはデータの定義・変更
- downは戻る作業
5-1-3 テーブル定義
- カラム:name
- 型 :varchar(100)
- 備考 :著者名
$table->string('name','100');
参考:スキーマビルダの構文($table->bigIncrements('id');)
カラム属性例(->nullable())
$table->string('name','100’)->nullable();
メソッド例
$table->string(‘mail’)->unique();
下記も可
$table->string(‘mail’) $table->unique(‘mail’)
5-1-4 マイグレーションの実行とロールバック
Mysqlでテーブル定義の確認方法 desc 〇〇;
戻り方
php artisan migrate:rollback //1つ戻る php artisan migrate:reset //全て戻る
5-2 シーダー
システムを使う最初の段階から無いと困るデータを入れたりするときに使う
5-2-4 faker
Fakerはダミーデータを入れることができる
5-3 Eloquent(エロクアント)
1つのテーブルに対して、1つのEloquentクラス
下記のようにすると暗黙的に関連づけられる
- テーブル名:複数
- Eloquentクラス:単数
ルールを適応しない場合:
Protected $table = ‘テーブル名'
5-3-2-4 Mass Assignmentによる脆弱性への対策
Eloquentのcreateで割り当てようとする値は、あらかじめEloquent側で割り当て許可を与えなくてはいけない。面倒だけどこれはセキュリティ上の仕様だ。
$guarded変数に配列を設定した上でprotectedすれば、「id」と「year」以外の要素を、createから渡すことができる。ブラックリスト方式は$guarded(保護)
$fillable(代入可能)に配列を設定した上でprotectedすれば、「name」と「age」だけをcreateから渡すことができる。
参考
5-3-3 データ検索・データ更新
controller
use App\Author; class AuthorController extends Controller{ public function index(){ //レコード数を取得 $count = Author::count(); return view('author',['msg'=>$count]); } }
プライマリーキーによる取得(findとfinrorfail)
$prime = Author::find(1); //プライマリーキー = 1を出力
//output {"id":1,"name":"\u8457\u8005\u540d","bookdetail_id":1,"author_id":1,"publisher_id":1,"created_at":"2019-08-09 04:11:37","updated_at":"2019-08-09 04:11:37"}
Findorfail この例外がキャッチされないと自動的に404HTTPレスポンスがユーザに送り返されます。 404処理を書かなくてもいい
$specify = Author::whereName('著者名')->get();
//output [{"id":1,"name":"\u8457\u8005\u540d","bookdetail_id":1,"author_id":1,"publisher_id":1,"created_at":"2019-08-09 04:11:37","updated_at":"2019-08-09 04:11:37"}]
5-3-3-4 新規レコードの登録
方法は2つ - 配列を引数にして#create - Eloquentのインスタンス作って、#save
5-3-4 データ操作の応用(クエリビルダ)
クエリビルダとは、SQL文を使用せずにPHPでデータ抽出できる仕組み
$author = Author::find(1); return $author->toJson();
//output {"id":1,"name":"\u8457\u8005\u540d","bookdetail_id":1,"author_id":1,"publisher_id":1,"created_at":"2019-08-09 04:11:37","updated_at":"2019-08-09 04:11:37"}
5-4-2 クエリビルダの取得
取得方法2つ - DBファサード - Illuminate\Database\connectionクラスから取得
① DBファサード $query = DB::table(’samples’); ② Illuminate\Database\connectionクラスから取得 $db = \Illuminate\Foundation\Application::getInstance()->make(‘db’); $connection = $db->connection(); $query = $connection->table(’samples’);