2015-07-22 4 views
1

Я пытаюсь сделать следующее:Laravel 5 - Elequent GROUP BY не удается

У меня есть две таблицы:

1) Content 
    id, 
    section_id 
    parent_id, 
    sequence, 

2) Sections 
    id, 
    title, 
    description, 
    date_entered 

Каждый контент должен иметь раздел, который определяется с помощью внешнего ключа , содержание может иметь раздел подменит, в котором, если содержание имеет одинаковый parent_id - то это классифицируется как подразделы .. так, например:

1. My first section 
    1.1. My first sub section 
2. My second section 
3. My third section 
    3.1 My third sub section 

Я использую красноречив и использовал следующий:

$sections = Content::orderBy('sequence', 'desc') 
       ->groupBy('parent_id')->get(); 

Если я выход этих пределов цикла Еогеаспа, то он будет показывать только одну из записей, где существует несколько, которые имеют один и тот же parent_id, если я удалю groupBy то он будет отображать все записи, но не в группах

Я настроил отношения так, что: есть belongsTo отношения .. Так

public function sections() 
    { 
    return $this->belongsTo('App\Sections', 'section_id'); 
    } 

Где я буду здесь не так?

UPDATE:

 1) Content 
      id, 
      section_id 
      parent_id, 
      sequence, 

      FOREIGN KEYS: 
      parent_id -> id, 

      section_id -> id on Sections (below) 

2) Sections 
    id, 
    title, 
    description, 
    date_entered 

ответ

2

Если я правильно понимаю, вы хотели бы получать список объектов контента вместе со своими детьми Содержание объектов, правильно?

Самый простой способ сделать это, чтобы создать родитель-потомок отношения в вашей красноречивый Content модели, а затем использовать его для загрузки родителей с детьми:

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

$ будет содержать коллекцию всех объектов Content, у которых нет родителя. Каждый из объектов будет иметь атрибут $ content-> children, который содержит коллекцию всех детей Содержимое объектов. Все дочерние объекты также будут содержать ссылку на своих родителей в $ childContent-> parent. У обоих родителей и детей будет соответствующий раздел в -> раздел атрибут.

Если вы хотите, чтобы отобразить некоторый контент иерархии теперь в вашем лезвию шаблона, вы можете передать $ содержимое переменного к представлению и выполните следующие действия:

<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(); 
+0

Благодарим вас за это. Это, к сожалению, ничего не возвращает. Но я думаю, что это потому, что внешний ключ в «Контенте» не был настроен. Значит, 'parent_id' должен быть внешним ключом к другим записям внутри таблицы? – Phorce

+0

Да. Для детей вы должны установить его идентификатор родительского идентификатора содержимого. Для родительских объектов содержимого оно должно быть равно null. –

+0

Нет, это не работает. Внешние ключи настроены для: 'parent_id' -> для других разделов внутри таблицы Content и внешнего ключа' section_id' для идентификаторов внутри таблицы разделов? – Phorce

Смежные вопросы