Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Laravel 5 - Elequent GROUP BY không thành công

Nếu tôi hiểu đúng, bạn muốn tìm nạp danh sách các đối tượng Nội dung cùng với các đối tượng Nội dung con của chúng, đúng không?

Cách dễ nhất để làm điều đó là tạo mối quan hệ cha-con trong Nội dung hùng hồn của bạn và sau đó sử dụng mô hình đó để tải các bậc cha mẹ có con cái:

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

Sau đó, nếu bạn muốn liệt kê Nội dung đối tượng Phần của họ cùng với con cái và các bộ phận của chúng, bạn có thể tìm nạp dữ liệu như vậy:

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

$ nội dung sẽ chứa một tập hợp tất cả các đối tượng Nội dung không có cha. Mỗi đối tượng sẽ có $ content-> con thuộc tính chứa một tập hợp tất cả Nội dung con các đối tượng. Tất cả các đối tượng con cũng sẽ giữ một tham chiếu đến cha mẹ của chúng trong $ childContent-> parent . Cả cha mẹ và con cái sẽ có phần tương ứng của họ trong phần -> thuộc tính.

Nếu bây giờ bạn muốn hiển thị một số thứ bậc Nội dung trong Blade của mình mẫu, bạn có thể chuyển biến $ nội dung vào dạng xem và thực hiện như sau:

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

Tôi nhận thấy rằng bạn có trình tự trong mô hình của bạn. Tôi cho rằng bạn muốn nội dung được sắp xếp theo trường đó. Trong trường hợp này, bạn sẽ cần sửa đổi cách tìm nạp dữ liệu:

$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. Sử dụng cơ sở dữ liệu XAMPP MySql từ một máy tính khác

  2. lan truyền dữ liệu mysql trên nhiều đĩa

  3. Sắp xếp phim theo 2 thứ

  4. Tối ưu hóa truy vấn mysql để sử dụng chỉ mục trên mệnh đề Bitwise where

  5. Cách xóa toàn bộ cơ sở dữ liệu MySQL