sql >> Databasteknik >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY misslyckas

Om jag förstår det rätt, vill du hämta en lista över innehållsobjekt tillsammans med deras underordnade innehållsobjekt, eller hur?

Det enklaste sättet att göra det är att skapa en förälder-barn-relation i ditt vältaliga innehåll modell och använd den sedan för att ladda föräldrar med barn:

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

Sedan, om du vill lista innehåll invänder deras sektion tillsammans med deras barn och deras sektioner kan du hämta data så här:

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

$contents kommer att innehålla en samling av alla innehållsobjekt som inte har någon förälder. Vart och ett av objekten kommer att ha ett $content->barn attribut som innehåller en samling av alla underordnade innehåll objekt. Alla underordnade objekt kommer också att ha en referens till sin förälder i $childContent->förälder . Både föräldrar och barn kommer att ha sin motsvarande sektion i ->sektion attribut.

Om du ville visa innehållshierarki nu i ditt blad mall kan du skicka variabeln $contents till vyn och göra följande:

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

Jag märkte att du har en sekvens fältet i din modell. Jag antar att du vill att innehållet ska sorteras efter det fältet. I det här fallet måste du ändra sättet du hämtar data på:

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



  1. SonarQube:Hur minskar man storleken på measure_data.ibd?

  2. DISTINERA en kolumn i en databas

  3. Hur man använder LIKE i SQL

  4. Hur sammanfogar man flera rader?