0

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

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

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

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

4

2 回答 2

1

为以后偶然发现的任何人回答这个问题。通过将查询更改为

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

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

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

                 <td>{{ $issuer->id }}</td>
                 <td>{{ $issuer->nation }}</td>
                 <td>{{ $issuers->author }}</td>
于 2016-01-26T19:59:50.057 回答
0
    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'] }}
于 2018-05-18T08:24:50.130 回答