今回はマイグレーションファイルを利用したDBの作成とModelを使ったDBへのインサートを行います。
DBの設定
最初にDBの設定です。プロジェクト直下の.envファイルを修正します。当ブログではmysqlを使用するのでmysqlの個所を設定します。
MemoryMap/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
↓
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=[DB名]
DB_USERNAME=[DBのユーザー名]
DB_PASSWORD=[DBのパスワード]
マイグレーションファイルとModelの作成
次に雛形のマイグレーションファイルとModelを作成します。以下のコマンドで作成します。
php artisan make:model gaishutsu_kiroku --migration
Modelを作成するコマンドに–migrationオプションを付けマイグレーションファイルも作成しています。gaishutsu_kirokuというModelファイルを作成します。
Modelファイルは MemoryMap/app 配下に「gaishutsu_kiroku.php」という名前で作成されます。
マイグレーションファイルは MemoryMap/database/migrations 配下に「2019_03_30_134724_create_gaishutsu_kirokus_table.php」(日付は作成日)という複数形の名前で作成されます。
マイグレーションファイルの修正
まずはマイグレーションファイルを以下の通りに修正します。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateGaishutsuKirokusTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('gaishutsu_kirokus', function (Blueprint $table) {
//ID
$table->increments('id');
//ユーザIDの設定
$table->integer('user_id')->unsigned();
//ユーザIDをusersテーブルの主キーと紐づける
$table->foreign('user_id')->references('id')->on('users');
//出かけた場所の名前
$table->string('place_name');
//コメント
$table->string('place_comment');
//緯度
$table->double('ido');
//経度
$table->double('keido');
//外出した日時
$table->date('place_date');
//画像の名前
$table->string('file_name');
//テーブルの作成日時
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('gaishutsu_kirokus');
}
}
デフォルトで存在するusersテーブルの主キーを外部キーとして紐づけています。
マイグレーションファイルの作成が完了したらマイグレーションのコマンドを実行します。
php artisan migrate
成功して http://localhost/phpmyadmin にアクセスするとテーブルの作成が完了しています。
モデルファイルの修正
次にモデルファイルの作成です。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class gaishutsu_kiroku extends Model
{
// データの挿入を許可する
protected $fillable = [
'user_id','place_name','place_comment','ido','keido','place_date','file_name',
];
}
$fillableに指定したカラムのみ、create()やfill()、update()で値が代入されます。
登録画面のフォームは以下の通りなのでサブミット押下で /MemoryMap/public/insertInfo のURLが発行されます。
<form action="/MemoryMap/public/insertInfo" method="POST">
{{ csrf_field() }}
<p class="label">出かけた場所</p>
<input placeholder="例)東京スカイツリー" name="name" id="name" class="in" /><br>
<input type="button" onClick="attrLatLngFromAddress()" value="検索する"
class="btn2">
<div id="map" class="map"></div>
<p class="label">緯度</p>
<input placeholder="緯度" name="ido" id="ido" class="in" /><br>
<p class="label">経度</p>
<input placeholder="経度" name="keido" id="keido" class="in" /><br>
<p class="label">コメント</p>
<input placeholder="コメントを記入して下さい" name="com" class="in" /><br>
<p class="label">出かけた日</p>
<input type="date" name="date" class="in" /><br>
<p class="label">写真</p>
<input type="file" name="file" name="file" class="in" /><br>
<input type="submit" value="送信" class="btn">
</form>
ルートの設定は以下です。MemoryMap/routes/web.php
Route::post('/insertInfo', 'MemoryMapController@insertInfo');
コントローラーでインサートの処理を書きます。MemoryMap/app/Http/Controllers/MemoryMapController.php
// 登録画面の入力値をDBに登録する
public function insertInfo(Request $request){
$name = $request->input('name');
$ido = $request->input('ido');
$keido = $request->input('keido');
$com = $request->input('com');
$date = $request->input('date');
//おでかけ情報をインサート
$gaishutsu_kiroku = new gaishutsu_kiroku();
// データベースに値をinsert
$gaishutsu_kiroku->create([
'user_id' => 1,
'place_name' => $name,
'place_comment' => $com,
'ido' => $ido,
'keido' => $keido,
'place_date' => $date,
'file_name' => 'サンプル',
]);
return view('torokuGamen');
}
ユーザーIDとファイル名は今後取得できるように処理を作成するため暫定値を設定しています。
上記以外は画面からの入力値をDBに登録しています。
メソッドの引数にRequestを指定し、画面の入力値を受け取ります。
public function insertInfo(Request $request)
$request->input(‘xxx’); でformの値を受け取れます。
以下の文でModelファイルのインスタンスを作成します。
$gaishutsu_kiroku = new gaishutsu_kiroku();
そして create でDBのカラムにインサートしてます。
登録画面で入力して送信ボタンを押すと。
以下の通りDBに値が格納されました。
次回は登録したデータをMAPに表示させます。