Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY está falhando


Se entendi corretamente, você gostaria de buscar uma lista de objetos Content junto com seus objetos Content filhos, correto?

A maneira mais fácil de fazer isso é criar uma relação pai-filho em seu Conteúdo do Eloquent model e, em seguida, use isso para carregar os pais com filhos:
<?php
class Content extends Model {
  public function children() {
    //this defines a relation one-to-many using parent_id field as the foreign key
    return $this->hasMany(Content::class, 'parent_id'); 
  }

  public function parent() {
    return $this->belongsTo(Content::class, 'parent_id'); 
  }

  public function section() {
    return $this->belongsTo(Section::class);
  }
}

Então, se você quiser listar Conteúdo objeta sua Seção junto com seus filhos e suas seções, você pode buscar os dados assim:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();

$contents conterá uma coleção de todos os objetos Content que não têm pai. Cada um dos objetos terá um $content->children atributo que contém uma coleção de todos os Conteúdo filhos objetos. Todos os objetos filhos também terão uma referência ao pai em $childContent->pai . Pais e filhos terão sua seção correspondente em ->seção atributo.

Se você quiser exibir alguma hierarquia de conteúdo agora em seu Blade template, você pode passar a variável $contents para a view e fazer o seguinte:
<ul>
@foreach($contents as $content)
  <li>{{$content->title}}</li>
  @if($content->children->count() > 0)
    <ul>
      @foreach($content->children as $childContent)
        <li>{{$childContent->title}}</li>
      @endforeach
   </ul>
  @endif
@endforeach
</ul>  

Percebi que você tem uma sequência campo em seu modelo. Suponho que você deseja que o conteúdo seja classificado por esse campo. Nesse caso, você precisará modificar a maneira de buscar os dados:
$contents = Content::with(['children' => function($builder) {
  $builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();