FLASH11月26日号に、これから日本で頑張っていきます、という記事を見たあとなので、びっくりしました。

ご冥福をお祈りいたします。
FLASH11月26日号に、これから日本で頑張っていきます、という記事を見たあとなので、びっくりしました。

ご冥福をお祈りいたします。
前回までの様子はこちら
お次はテーブルのデータを削除する処理を作成します。
まずは、ルーティング。
Route::get('/management/{id}/conform', 'RegisterManagementController@conform');
Route::post('/management/delete', 'RegisterManagementController@delete');
/management/{id}/conformにアクセスすると削除確認の画面が、
/management/deleteにアクセスすると、実際に削除処理を行うようにします。
次は一覧画面に削除確認画面へのリンクを作成します。
<td>{{ Html::link('/management/'.$list->id.'/conform', '削除') }}</td>

そして、削除確認画面。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">削除確認</div>
<div class="panel-body">
{!! Form::open(['url' => action('RegisterManagementController@delete')]) !!}
{!! Form::hidden('id', $item->id) !!}
<table>
<tr>
<td>名前</td>
<td>{!! $item->name !!}</td>
</tr>
<tr>
<td>住所</td>
<td>{!! $item->address !!}</td>
</tr>
<tr>
<td>電話番号</td>
<td>{!! $item->phone !!}</td>
</tr>
<tr>
<td>人数</td>
<td>{!! $item->num !!}</td>
</tr>
<tr>
<td>宿泊日数</td>
<td>{!! $item->days !!}</td>
</tr>
<tr>
<td>宿泊日</td>
<td>{!! $item->start_day !!}</td>
</tr>
</table>
{!! Form::submit('削除') !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection

隠しパラメータにid番号を含め、formをSubmitしたときのパラメータにします。
次に、コントローラー。
/**
* 削除確認
*
* @return \Illuminate\Http\Response
*/
public function conform($id)
{
return view('register.conform', ['item' => $this->registerManagement->getItemById($id)]);
}
/**
* 削除処理
*/
public function delete(Request $request)
{
$this->registerManagement->deleteById($request->id);
return redirect('management');
}
削除確認では、URLのID番号を受け取り、そのIDからデータを参照し、Viewに返しています。
削除処理では、$requestにID番号が入っていますので、そのIDをリポジトリに渡して、削除処理を行ったあと、一覧画面にリダイレクトします。
次はリポジトリ。
/**
* 予約を削除する
*
* @return void
*/
public function deleteById($id)
{
$model = $this->getItemById($id);
$model->delete();
}
IDでモデルを検索して、delete()メソッドを実行すれば、そのデータはデータベースから削除されます。

これで削除処理が完成しました。
次は、この情報から予約スケジュールを作成する処理を作成していきます。
↑よかったらクリックお願いします。
何を思ったのかJava版のマインクラフトを買ってしまいました。

単体でプレイしてもいいのですが、せっかくなので、サーバを立ち上げて、いろんな環境からプレイできるようにしたい、と思いました。
まずは、サーバに、ダウンロードしたjarファイルを設置します。
実行するコマンドは、
$ java -Xmx1024M -Xms1024M -jar server.jar nogui
デスクトップ環境があれば、noguiオプションを取り除けば、GUIでいろいろ操作できるのですが、

こんな感じ。
ログも確認できる他、接続しているユーザーも確認できるし、ここからコマンドを入力して設定を変えることもできます。
しかし、VPS上で動かすならば、デスクトップ環境は無いので、このような画面は使用できません。
taki@taki-300-030jp:~/minecraft-server$ java -Xmx1024M -Xms1024M -jar server.jar nogui [20:01:20] [main/ERROR]: Failed to load properties from file: server.properties [20:01:20] [main/WARN]: Failed to load eula.txt [20:01:20] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
実行すると、こんなメッセージが表示されます。
どうやらEULAを承諾しないと動かすことができないみたいなので、同じディレクトリに生成されている、eula.txtの記述を変更しなければいけません。
eula.txtを開いて、
eula=true
と書き換えます。
Done (47.956s)! For help, type "help"
と表示されればサーバは稼働しています。
iptableを使用している方は、マインクラフト用のポートを開放しなければ、外部からアクセスできません。
サーバの実行ログから、使用されているポート番号は25565であることがわかりますので、外部からこのポートへのアクセスを許可します。
$ sudo iptables -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT $ sudo /etc/init.d/netfilter-persistent save
これでVPSを再起動しても、マイクラサーバにアクセスできます。(マイクラサーバプログラムは再起動させないといけませんが)
このままでは、URL(またはIPアドレス)がわかってしまえば誰でもサーバにアクセスできる状態となってしまいます。
なので、管理者が許可したアカウントだけサーバにアクセスできるように、ホワイトリストを設定しなければなりません。
ホワイトリストを有効にするには、サーバプログラムと同じディレクトリに生成された、server.propertiesを開き、
white-list=true
に書き換えます。
これで、ホワイトリストが有効になります。
もしくは、サーバのコンソールに、
/whitelist on
と、入力してもOKです。
こちらのほうが簡単かもしれません。
次に、ホワイトリストの登録を行います。
サーバコンソールに以下のコマンドを入力します。
/whitelist add [アカウント名]
これで、ホワイトリストの登録が行なえます。
あとはクライアント側から登録アカウント名でログインし、サーバにアクセスすればワールドに入ることができます。
逆に登録されていないユーザーはワールドに入ることができません。
これで一通りの設定は完了です。
細かい設定は、サーバのコンソールから
/help
と入力すれば、コマンド一覧が表示されますよ。
前回までの様子はこちら。
ソースコードはこちら。
https://github.com/takishita2nd/hotel-mng
今回は登録した内容を更新するところまでやります。
データを更新する前に、データを更新するページにリンクするように一覧画面を修正します。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">予約一覧</div>
<div class="panel-body">
<table>
<tr>
<th>名前</th>
<th>住所</th>
<th>電話番号</th>
<th>人数</th>
<th>宿泊日</th>
<th>宿泊日数</th>
<th>編集</th>
<th>削除</th>
</tr>
@foreach ($registerLists as $list)
<tr>
<td>{{ $list->name }}</td>
<td>{{ $list->address }}</td>
<td>{{ $list->phone }}</td>
<td>{{ $list->num }}</td>
<td>{{ $list->days }}</td>
<td>{{ $list->start_day }}</td>
<td>{{ Html::link('/management/'.$list->id.'/edit', '編集') }}</td>
<td>削除</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</div>
</div>
@endsection

そして、ルーティングの設定も追加します。
Route::get('/management/{id}/edit', 'RegisterManagementController@edit');
Route::post('/management/update', 'RegisterManagementController@update');
更新フォームへのリンクと、実際にデータを更新するリクエストですね。
コントローラーには、以下の関数を追加します。
/**
* 編集処理
*/
public function edit($id)
{
return view('register.edit', ['item' => $this->registerManagement->getItemById($id)]);
}
/**
* 更新処理
*/
public function update(Request $request)
{
$param = $this->registerManagement->getParam();
$this->registerManagement->updateById($request->id,
[
$param[0] => $request->name,
$param[1] => $request->address,
$param[2] => $request->phone,
$param[3] => $request->num,
$param[4] => $request->days,
$param[5] => $request->start_day
]);
return redirect('management');
}
そして、リポジトリには以下の関数を追加。
// IDから予約を1件取得する
public function getItemById($id)
{
return ReserveManagement::where(['id' => $id])->first();
}
// 予約を更新する
public function updateById($id, $param)
{
$model = $this->getItemById($id);
foreach($this->paramNames as $name)
{
$model->$name = $param[$name];
}
$model->save();
}
「編集」のリンクのURLにデータベースのID番号が入っていて、それをコントローラーで受け取り、データベースからIDで参照して、データを取得します。
そして、取得したデータをViewに渡します。
実際に編集画面のViewはこちら。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">予約登録</div>
<div class="panel-body">
{!! Form::open(['url' => action('RegisterManagementController@update')]) !!}
{!! Form::hidden('id', $item->id) !!}
<table>
<tr>
<td>名前</td>
<td>{!! Form::text('name', $item->name) !!}</td>
</tr>
<tr>
<td>住所</td>
<td>{!! Form::text('address', $item->address) !!}</td>
</tr>
<tr>
<td>電話番号</td>
<td>{!! Form::number('phone', $item->phone) !!}</td>
</tr>
<tr>
<td>人数</td>
<td>{!! Form::select('num', ['1' => 1, '2' => 2], $item->num) !!}</td>
</tr>
<tr>
<td>宿泊日数</td>
<td>{!! Form::select('days', ['1' => 1, '2' => 2, '3' => 3, '4' => 4], $item->days) !!}</td>
</tr>
<tr>
<td>宿泊日</td>
<td>{!! Form::date('start_day', $item->start_day) !!}</td>
</tr>
</table>
{!! Form::submit('登録') !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection

見た目は登録と同じですが、デフォルト値を設定しているのが異なります。
コントローラーから受け取った値をデフォルト値として設定しています。
そして、登録ボタンを押すと、その情報がコントローラーのupdate関数に渡されます。
そして、その情報をデータベースに設定し、一覧画面にリダイレクトします。
これで更新処理が完成しました。
次回は削除処理を作りたいと思います。
↑よかったらクリックお願いします。
情報処理の資格を目指して勉強している人にとっては当たり前の話なんですがね。
パソコンの記憶領域には3種類ありまして。
と言う具合に分類されます。
レジスタは、CPUが直接扱うことができるデータの領域、
メモリは、そのCPUの計算結果の一時退避場所です。
これらは、電源をOFFにすると全て消えてしまいます。
なので、消えてしまうとマズいデータは全てストレージの領域に待避させます。
ストレージは、我々で言う、HDDとか、SSDと呼ばれる領域です。
各記憶領域のアクセススピードは、
レジスタ≫メモリ≫ストレージ
「≫」というのは、天地ほどの差があると言うことです。
パソコンはたくさんのアプリを起動すると、それだけ、沢山のメモリを使用します。
もし、このとき、必要なメモリのサイズを用意できなかったら。
OSは一番使用していないメモリの中のデータをストレージにコピーして、メモリの容量を確保します。
そして、必要になったとき、待避したストレージ上のデータをメモリに戻すという処理が発生します。
これは、情報処理の勉強をしている人ならわかるかもしれませんが、スワッピング(または、ページング)と呼ばれる処理です。
メモリが少ないとこの一連の処理が頻発します。
これが、パソコンの処理を重くしている一番の要因です。
なぜなら、通常のメモリアクセスより、ストレージにアクセスする方が遙かに遅いためです。
ここで、私が提案するのは、使用する用途によってわかりやすいように区別しようと言うことです。
例えば、
4GBというのは、主にスティック型PCに搭載される最低ラインのメモリサイズです。
これくらいならば、リモートデスクトップで開発用PCの画面を表示するだけならば、十分なスペックです。
というか、複数の画面を表示させようとするならば、それだけPCの処理が重くなります。十分なメモリサイズとは言えません。
しかし、8GBならば、ある程度のウインドウを開いても十分耐えられるでしょう。
文章作成に2画面使用する程度ならば、十分耐えられると言えます。
しかし、最近のインターネットブラウザは複数タブで使用される事が多いです。
このタブをたくさん開けば、それだけ、メモリが消費されることになります。
プログラマーならば、連絡用途と調べ物用途にたくさんのタブやウィンドウを開くことになりますので、それだけたくさんのメモリが必要になります。
でも、クリエイターレベルになるとそれだけでも足りません。
なぜなら、扱うデータファイルのサイズが大きいから。
複数の大規模な動画データを扱うならば、16GBでギリギリ、もしくは、それ以上のメモリが必要になるでしょう。
ちなみに、今のMAC Proだと、最大メモリは768GB。
最前線のYouTuber達はこのスペックで動画編集していると思って問題無いと思います。
今のPCのスペックでは、CPU自体の処理速度よりは、ストレージへのアクセス自体がボトルネック(一番処理が遅延している要因)と思いますので、
PCの処理が重いと感じ、様々な手を施しても改善しない場合は、メモリの増設とか、HDDをSSDに換装する、などの手を検討した方が良いかもしれません。
最近のホームページも重くなってきたし。
自分がPCを選ぶ場合は、まず最初にメモリのサイズを確認します。
ぶっちゃけ、CPUは世代や型番の違いによって、劇的に変化するわけではありません。
ストレージのサイズは後で外部HDD購入で増設できます。
あくまでも一番の遅延要因は、メモリ不足によるページング処理による遅延と言うことです。
なので、他のスペックよりも、何よりもメモリサイズを優先させます。
まぁ、これらは私の考えなので。
これからパソコンを購入したいと考えている人の参考になってもらえれば幸いです。
↑よかったらクリックおねがいします。
最新ソースはこちら
https://github.com/takishita2nd/hotel-mng
前回からの続きです。
今回はデータベースに登録するフォームを作成し、そこから実際にデータを登録するところまで作成します。
まずは、登録フォームの作成から。
フォームを作るには、ヘルパーを使うのがいいです。
$ composer require "laravelcollective/html":"^5.4.0"
これでフォームのヘルパーが使えます。
Viewはこんな感じで作成しました。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">予約登録</div>
<div class="panel-body">
{!! Form::open(['url' => action('RegisterManagementController@store')]) !!}
<table>
<tr>
<td>名前</td>
<td>{!! Form::text('name') !!}</td>
</tr>
<tr>
<td>住所</td>
<td>{!! Form::text('address') !!}</td>
</tr>
<tr>
<td>電話番号</td>
<td>{!! Form::number('phone') !!}</td>
</tr>
<tr>
<td>人数</td>
<td>{!! Form::select('num', ['1' => 1, '2' => 2]) !!}</td>
</tr>
<tr>
<td>宿泊日数</td>
<td>{!! Form::select('days', ['1' => 1, '2' => 2, '3' => 3, '4' => 4]) !!}</td>
</tr>
<tr>
<td>宿泊日</td>
<td>{!! Form::date('start_day', \Carbon\Carbon::now()) !!}</td>
</tr>
</table>
{!! Form::submit('登録') !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
Form::open()〜Form::close()までがフォームの部分です。
この間にいろいろ入力コントロールを入れます。

こんな感じで表示されます。便利。
登録ボタンを押したときの処理も追加します。
ルーティングの設定。
Route::get('/management/create', 'RegisterManagementController@create');
Route::post('/management', 'RegisterManagementController@store');
コントローラーの設定。
/**
* 入力フォーム
*/
public function create()
{
return view('register.create');
}
/**
* 登録処理
*/
public function store(Request $request)
{
$param = $this->registerManagement->getParam();
$this->registerManagement->add([
$param[0] => $request->name,
$param[1] => $request->address,
$param[2] => $request->phone,
$param[3] => $request->num,
$param[4] => $request->days,
$param[5] => $request->start_day
]);
return redirect('management');
}
$requestの中に、フォームに入力したデータが入ってます。
リポジトリからモデルに設定するパラメータを取得し、これらを連想配列に設定して、リポジトリに渡します。
その後、リダイレクトを行います。
次にリポジトリの設定。
private $paramNames = ['name', 'address', 'phone', 'num', 'days', 'start_day'];
// 予約を登録する
public function add($param)
{
$model = new ReserveManagement;
foreach($this->paramNames as $name)
{
$model->$name = $param[$name];
}
$model->save();
}
public function getParam()
{
return $this->paramNames;
}
パラメータ名を配列で持たせることによって、foreachで回せるし、コントローラーとの意識のズレも防ぐことができます。
もっとうまい方法があるかもしれないけど、これが精一杯じゃ。
これで、登録処理が動くようになりました。

↑よかったらクリックお願いします。
今回はLaravelでコントローラーからモデルを介してデータベースにアクセスするところまでを作ります。
https://github.com/takishita2nd/hotel-mng
まずは、モデルにアクセスして、アレコレするクラスを作成します。
ここでは、repositoryとしていますが、特に名前に決まりはありません。
<?php
namespace App\Repository;
use App\Model\ReserveManagement;
class RegisterManagementRepository
{
// 予約一覧を取得する
public function getList()
{
return ReserveManagement::all();
}
}
今回はリスト取得だけの機能だけ実装します。
これをコントローラーで使用します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Repository\RegisterManagementRepository;
class RegisterManagementController extends Controller
{
protected $registerManagement;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->registerManagement = new RegisterManagementRepository();
}
/**
* Show the Register.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('register.index', ['registerLists' => $this->registerManagement->getList()]);
}
}
Laravelにはサービスコンテナという機能があるようですが、今回はシンプルにコントローラーのコンストラクタでrepositoryをインスタンス化します。
Viewはシンプルに名前を一覧表示するだけです。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">予約一覧</div>
<div class="panel-body">
<table>
@foreach ($registerLists as $list)
<tr>
<td>これは {{ $list->name }} ユーザーです。</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
最後にルーティングを追加します。
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/management', 'RegisterManagementController@index');
これで、ログイン状態で
http://localhost:8000/management
にアクセスすると、こんな感じで表示されました。

これでモデル・コントローラー・ビュー間のやり取りができるようになりました。
次は、CURD機能を一通り作成してみようと思います。
届きました。

BASE NOODLE!
サブスクリプションで注文して、初回12食分50%オフの2840円でございます。

これ1食で一日に必要な栄養素(炭水化物とナトリウムを除く)を摂取することができます。
つまり、3食食べれば糖質オフの食事になります。
ダイエットにオススメ。
さて、これをどうやって食べようか、と考えたのですが、まずは、ヌードルだからラーメンでしょ、ということで、


ラーメンでございます。
見た目は完全に蕎麦。
しかし、これは失敗でした。
ヌードル本体に味がしっかりついているので、スープが完全にその味に負けてます。
あまり合いません。
スープよりは、例えば、焼きそばやパスタのソースに合うかもしれません。
ということで、2食目はこうしました。

BASE NOODLEの肉味噌あえ
これくらいの味付けで十分なんですよ。
BASE NOODLE自体に味がしっかり付いてますからね。
そして、3食目。

BASE NOODLEのラーメンサラダ
ドレッシングは冷蔵庫に眠っていたおろししゃぶしゃぶのタレを使いました。
これでも十分美味しいです。
マヨネーズとか、普通のサラダドレッシングでも美味しいかも。
しかし、ラーメンサラダ考えた北海道民、天才だな。
あと、一食分が結構量あるので、かなり腹持ちは良いです。
来週から水曜日は完全栄養食生活にしたいと思います。
なぜなら、木曜日は焼き肉の日だから。
最新ソースはこちら
https://github.com/takishita2nd/hotel-mng
TechCommitの課題で、予約管理を行うツールを作成すえうということで、Laravelで作成してみようと思いまして。
まずはデータベースの作成から着手。
イメージはこんな感じ。

使用する部屋は1つという条件があるので、そんなに複雑にしなくてもいい。
だが、予約が空いている日、埋まっている日が簡単にわかるように、予約が入っている日を管理できるテーブルも追加する。
Laravelでデータベースを作成するマイグレーションファイルを作成する。
$ php artisan make:migration create_reserve_management
中身はこんな感じ。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateReserveManagement extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('reserve_managements', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('address');
$table->string('phone');
$table->integer('days');
$table->date('start_day');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
Schema::create('reserve_day_lists', function (Blueprint $table) {
$table->increments('id');
$table->date('day');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
Schema::create('reserve_day_lists_reserve_managements', function (Blueprint $table) {
$table->increments('id');
$table->integer('reserve_managements_id')
->foreign('reserve_managements_id')
->references('id')->on('reserve_managements')
->onDelete('cascade');
$table->integer('reserve_day_lists_id')
->foreign('reserve_day_lists_id')
->references('id')->on('reserve_day_lists')
->onDelete('cascade');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('reserve_day_lists_reserve_managements');
Schema::dropIfExists('reserve_day_lists');
Schema::dropIfExists('reserve_managements');
}
}
あとで微調整はする。
コメント無くてすまぬ。
これらは色々試行錯誤した結果なので、あとで直すかもしれない。
最新のコードはgitを参照していただきたい。
Schema::create()を使って、3つのテーブルを作成している。
1つめが予約管理、その次が予約日管理、最後に中間テーブル。
中間テーブルからは各管理テーブルを紐付けるように外部参照キーを設定している。
で、このテーブルを扱うために、モデルを作成する。
$ php artisan make:model reserve_management
これでモデルのベースが作成される。
整理のためにディレクトリは移動しているが、一個作ればそれをベースにして複製すればよい。
各管理テーブルからは以下のような関数を追加する。
public function hasDayListAndManagement()
{
return $this->belongsTo('App\Model\reserve_day_lists_reserve_managements', 'id', 'reserve_managements_id');
}
これで、管理テーブルから中間テーブルをリレーションすることができる。
逆に、中間テーブルから管理テーブルには、
public function hasManagement()
{
return $this->hasMany('App\Model\reserve_management', 'id', 'reserve_managements_id');
}
public function hasDayList()
{
return $this->hasMany('App\Model\reserve_day_list', 'id', 'reserve_day_lists_id');
}
と、すれば、参照できるようになる。
試しに、以下のコマンドを実行する。
$ php artisan tinker
$test = App\Model\reserve_day_list::first()
=> App\Model\reserve_day_list {#2912
id: 1,
day: "2019-10-10",
created_at: "2019-11-20 00:52:20",
updated_at: "2019-11-20 00:52:20",
}
$test2 = $test->hasDayListAndManagement()
=> Illuminate\Database\Eloquent\Relations\BelongsTo {#2904}
$test2->get()
=> Illuminate\Database\Eloquent\Collection {#2897
all: [
App\Model\reserve_day_lists_reserve_managements {#2911
id: 1,
reserve_managements_id: 1,
reserve_day_lists_id: 1,
created_at: "2019-11-20 00:52:56",
updated_at: "2019-11-20 00:52:56",
},
],
}
$test2->first()->hasManagement()->get()
=> Illuminate\Database\Eloquent\Collection {#2923
all: [
App\Model\reserve_management {#2915
id: 1,
name: "aaa",
address: "bbb",
phone: "ccc",
days: 2,
start_day: "2019-10-10",
created_at: "2019-11-20 00:51:46",
updated_at: "2019-11-20 00:51:46",
},
],
}
これで、予約日管理テーブルから予約管理テーブルを参照することができた。
逆に、予約管理テーブルから予約日管理テーブルを参照する。
$test = App\Model\reserve_management::first()
=> App\Model\reserve_management {#2912
id: 1,
name: "aaa",
address: "bbb",
phone: "ccc",
days: 2,
start_day: "2019-10-10",
created_at: "2019-11-20 00:51:46",
updated_at: "2019-11-20 00:51:46",
}
$test2 = $test->hasDayListAndManagement()
=> Illuminate\Database\Eloquent\Relations\BelongsTo {#2904}
$test2->first()->hasDayList()->get()
=> Illuminate\Database\Eloquent\Collection {#2899
all: [
App\Model\reserve_day_list {#2911
id: 1,
day: "2019-10-10",
created_at: "2019-11-20 00:52:20",
updated_at: "2019-11-20 00:52:20",
},
],
}
できました。
Laravelはこれら、データベースへのアクセスが簡単だからいいよね。