sql >> Databáze >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY selhává

Pokud tomu dobře rozumím, chtěli byste načíst seznam objektů obsahu spolu s jejich potomky, správně?

Nejjednodušší způsob, jak toho dosáhnout, je vytvořit vztah rodič-dítě ve vašem výmluvném obsahu model a poté jej použijte k načtení rodičů s dětmi:

<?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);
  }
}

Potom, pokud chcete uvést Obsah objekty svou sekci společně s jejich dětmi a jejich sekcemi můžete načíst data takto:

$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();

$contents bude obsahovat kolekci všech objektů Content, které nemají rodiče. Každý z objektů bude mít $content->děti atribut, který obsahuje kolekci všech podřízených obsahu objektů. Všechny podřízené objekty budou také obsahovat odkaz na jejich rodiče v $childContent->parent . Rodiče i děti budou mít odpovídající sekci v ->sekci atribut.

Chcete-li nyní zobrazit nějakou hierarchii obsahu ve svém Blade šablony, můžete předat proměnnou $contents do zobrazení a provést následující:

<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>  

Všiml jsem si, že máte sekvenci pole ve vašem modelu. Předpokládám, že chcete, aby byl obsah seřazen podle tohoto pole. V tomto případě budete muset upravit způsob načítání dat:

$contents = Content::with(['children' => function($builder) {
  $builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();



  1. Jak odstranit prvních 1000 řádků z tabulky pomocí SQL Server 2008?

  2. Dotaz MySQL pro extrakci prvního slova z pole

  3. MySQL – Jaký je rozdíl mezi GROUP BY a DISTINCT?

  4. Nelze naplnit fond (není k dispozici žádný vyrovnávací prostor)