在 blade 中显示连接查询的结果

Display results of join query in blade

我在显示 blade 模板中的查询结果时遇到了一些困难。基础知识:我有两张桌子;国家和发行人。 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>

这 returns $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() 错误中提供了 returns 和无效参数。接下来我尝试使用方法...

                      @foreach($issuers as $issuer)
                   <tr>
                     <td>{{ $issuer->id }}</td>
                     @foreach($issuer->Country() as $nation)
                     <td>{{ $issuer->nation }}</td>
                     @endforeach
                     <td>{{ $issuers->author }}</td>

这不会抛出任何错误,但 returns 也不会抛出任何错误。该列被简单地跳过,其他所有回显的内容都向左移动一列。

我在这里有点迷路了,我认为这是因为我的大脑顽固地坚持我正在访问查询结果的元素而不是关系的元素的想法,所以我不太清楚弄清楚为什么我需要为那一列创建一个单独的循环,或者该循环应该如何工作。任何帮助将不胜感激。

编辑:更改了最后一部分,因为我打错了。

为以后偶然发现的人回答这个问题。通过从

更改查询,我能够在没有模型关系的情况下直接从查询结果中访问 nation 的值
->select('issuers.*', 'countries.nation')

->select('issuers.*', 'countries.nation as nation')

我只是从他们那里访问了该值,就像我访问其他所有内容一样:

                 <td>{{ $issuer->id }}</td>
                 <td>{{ $issuer->nation }}</td>
                 <td>{{ $issuers->author }}</td>
    Change this

$issuers = ISSUER::join('countries', 'issuers.country_id', '=', 'countries.id')
             ->select('issuers.*', 'countries.nation')
             ->orderBy('nation', 'asc')
             ->orderBy('author', 'asc')
             ->get();
TO

$issuers = ISSUER::
                 ->join('countries', 'issuers.country_id', '=', 'countries.id')
                 ->derBy('nation', 'asc')
                 ->orderBy('author', 'asc')
                 ->get();

    Get all the content in your Blade like this

    {{ $issuers ['type_the_name_of_the_column_you_want_to_display'] }}