在刀片中显示连接查询的结果

时间:2016-01-26 19:27:28

标签: laravel laravel-5.2 laravel-blade laravel-query-builder

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

从他们那里我只是简单地访问了这个值:

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

答案 1 :(得分: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'] }}
相关问题