sql >> Database >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY mislukt

Als ik het goed begrijp, wil je een lijst met inhoudsobjecten ophalen samen met hun onderliggende inhoudsobjecten, correct?

De eenvoudigste manier om dat te doen is door een ouder-kindrelatie te creëren in je Welsprekende Content model en gebruik dat dan om ouders met kinderen te laden:

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

Als u vervolgens Inhoud . wilt weergeven objecten hun Sectie samen met hun kinderen en hun secties, kunt u de gegevens als volgt ophalen:

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

$contents zal een verzameling bevatten van alle Content-objecten die geen bovenliggend item hebben. Elk van de objecten heeft een $content->children attribuut dat een verzameling van alle Inhoud voor kinderen bevat voorwerpen. Alle onderliggende objecten bevatten ook een verwijzing naar hun ouder in $childContent->ouder . Zowel ouders als kinderen hebben hun overeenkomstige sectie in ->sectie attribuut.

Als je nu wat inhoudshiërarchie wilt weergeven in je Blade sjabloon, kunt u de variabele $contents doorgeven aan de weergave en het volgende doen:

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

Ik heb gemerkt dat je een reeks . hebt veld in uw model. Ik ga ervan uit dat u wilt dat de inhoud op dat veld wordt gesorteerd. In dit geval moet u de manier wijzigen waarop u de gegevens ophaalt:

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



  1. MySQLDumper:een op PHP en Perl gebaseerde MySQL-databaseback-uptool

  2. Beheerprogramma's voor SQL Server 2017

  3. Kan een MYSQL-back-up niet terugzetten naar een nieuwe database

  4. Hoe werken Stuff en 'For XML Path' in SQL Server?