Mysql
 sql >> база данни >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY е неуспешен

Ако разбирам правилно, бихте искали да извлечете списък с обекти Content заедно с техните дъщерни обекти Content, нали?

Най-лесният начин да направите това е да създадете връзка родител-дете във вашето Eloquent Съдържание модел и след това го използвайте, за да заредите родителите с деца:

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

След това, ако искате да посочите Съдържание обекти техния Раздел заедно с техните деца и техните секции, можете да извлечете данните по следния начин:

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

$contents ще съдържа колекция от всички обекти Content, които нямат родител. Всеки от обектите ще има $content->деца атрибут, който съдържа колекция от всички дъщерни Съдържание обекти. Всички дъщерни обекти също ще съдържат препратка към своя родител в $childContent->parent . И родителите, и децата ще имат съответния раздел в ->раздел атрибут.

Ако искате да покажете някаква йерархия на съдържанието сега във вашия Blade шаблон, можете да предадете променливата $contents на изгледа и да направите следното:

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

Забелязах, че иматепоследователност поле във вашия модел. Уверявам, че искате съдържанието да бъде сортирано по това поле. В този случай ще трябва да промените начина, по който извличате данните:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на MySql с Android без използване на PHP

  2. Приложете ORDER BY към UNION (Mysql)

  3. MySQL:Не можете да посочите целева таблица за актуализиране в клауза FROM

  4. Symfony2:Избройте градовете по държави

  5. Внедряване на единично влизане за три уебсайта в PHP?