【问题标题】:Display results of join query in blade在刀片中显示连接查询的结果
【发布时间】:2016-05-03 12:15:09
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:
          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'] }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2015-03-10
        • 2015-04-04
        • 1970-01-01
        相关资源
        最近更新 更多