ブレード テンプレートでクエリの結果を表示するのに少し苦労しています。基本: 2 つのテーブルがあります。国と発行者。Country モデルには、Issuer と hasMany の関係があり、その逆もあります。両方の関係がモデルで適切に定義されています。国の名前(国)も含む発行者のリストを表示しようとしています。IssuersController での私のクエリは次のとおりです。
$issuers = ISSUER::join('countries', 'issuers.country_id', '=', 'countries.id')
->select('issuers.*', 'countries.nation')
->orderBy('nation', 'asc')
->orderBy('author', 'asc')
->get();
このクエリは機能し、dd(); は、すべての発行者データとそれに対応する国名を含む各発行者の配列を返すことを示しています。完全。ただし、これを自分のビューに表示しようとすると、壁にぶつかります。私の最初の試みはただ使用することでした
@foreach($issuers as $issuer)
<tr>
<td>{{ $issuer->id }}</td>
<td>{{ $issuer->nation }}</td>
<td>{{ $issuers->author }}</td>
これは、$nation で未定義の変数を返します。関係にアクセスしようとしていないので、なぜこれが起こるのかわかりません。クエリから返された配列の結果にアクセスしようとしているだけです。その時点で関係は関係ないはずです。とにかく、私が試す関係を利用しようと
@foreach($issuers as $issuer)
<tr>
<td>{{ $issuer->id }}</td>
@foreach($issuer->nation as $nation)
<td>{{ $issuer->nation }}</td>
@endforeach
<td>{{ $issuers->author }}</td>
foreach() エラーで指定された無効な引数を返します。次に、メソッドを使用しようとします...
@foreach($issuers as $issuer)
<tr>
<td>{{ $issuer->id }}</td>
@foreach($issuer->Country() as $nation)
<td>{{ $issuer->nation }}</td>
@endforeach
<td>{{ $issuers->author }}</td>
これはエラーをスローしませんが、何も返しません。列は単純にスキップされ、エコーされる他のすべてのものは 1 列左にシフトされます。
私はここでちょっと迷っています。それは、関係の要素ではなく、クエリ結果の要素にアクセスしているという考えを脳が頑固に保持しているためだと思います。その1つの列の別のループ、またはそのループがどのように機能するか。どんな助けでも大歓迎です。
編集:間違って入力したため、最後の部分を変更しました。