#はじめに
以前正規化とはで学んだように、効率よくデータを扱うためデータを一定のルールに基づいてテーブルを変形し整理しましたが、分割したテーブルにある内容を1つのviewで表示するための手続きについてまとめます。
テーブル同士にリレーションを持たせることにより、例えば【people】テーブルと【lendings】テーブルの内容を1つのviewで表示できます。
#Laravelのリレーションの種類
Laravelではテーブルに対応したModelを定義することにより、関連を明示することでデータをうまく扱うことができます。
テーブル同士の関連の種類は、1対1、1対多、多対多、その他にも関係の構文があります。
#hasOne(1対1)について
hasOneは主テーブルのあるレコードに対して、従テーブルの1つのレコードが紐付けられるときに用いられます。
例えば上記のような場合です。
主テーブルのある人に対して従テーブルのパスポート情報は1つしか持ちません。
###hasOne(1対1)の記述について
public function lending()
{
return $this->hasOne('App\Models\lending');
}
{{$item->passports->getData()}}
#hasMany(1対多)について
hasManyは主テーブルのあるレコードに対して、従テーブルの複数のレコードが紐付けるときに用いられます。
例えば上記のような場合です。
主テーブルのある人に対して従テーブルの貸出情報は複数もちます(もつ場合もあります)。
###hasMany(1対多)の記述について
public function lendings()
{
return $this->hasMany('App\Models\lending');
}
@foreach ($item->$lending as $obj)
<tr>{{$obj->getData()}}</tr>
@endforeach
#belongsToについて
belongsToは従テーブルの複数レコードに対して、主テーブルの1つのレコードが紐付けるときに用いられます。
*※hasOneやhasManyは主テーブルから関連する従テーブルのレコードを取り出すものでしたが、belongsToは逆に従テーブルから関連する主テーブルのレコードを取り出すものです。
例えば上記のような場合です。
従テーブルの複数の貸出情報に対しては主テーブルのある人をさします。
####belongsToの記述について
public function person()
{
return $this->belongsTo('App\Models\Person');
}
public function getData()
{
return $this->id.': ' .$this->person->name.' 貸出日:'. $this->id;
}
#おわりに
正規化したデータをリレーションによって関連付けすることに整理されたまま扱えますね。