kmmkの雑種系日記

学習まとめです。

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');)

readouble.com

カラム属性例(->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から渡すことができる。

参考

laravel.hatenablog.com

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’);