gpt4 book ai didi

php - Laravel 5 - Elequent GROUP BY 失败

转载 作者:行者123 更新时间:2023-11-29 06:24:59 25 4
gpt4 key购买 nike

我正在尝试执行以下操作:

我有两个表:

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

我正在使用 Eloquent 并使用了以下内容:

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

如果我在 foreach 循环中输出这些,那么它只会显示其中一条记录,其中有多个记录具有相同的 parent_id,如果我删除 groupBy 那么它将显示所有记录,但不成组

我已经建立了这样的关系:有一个 belongsTo 关系..所以

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

我哪里出错了?

更新:

     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

最佳答案

如果我没理解错的话,您想获取 Content 对象的列表及其子 Content 对象,对吗?

最简单的方法是在 Eloquent 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);
}
}

然后,如果你想列出 Content 对象的 Section 以及它们的子对象和它们的部分,你可以像这样获取数据:

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

$contents 将包含所有没有父对象的 Content 对象的集合。每个对象都有一个 $content->children 属性,该属性包含所有子 Content 对象的集合。所有子对象还将在 $childContent->parent 中保存对其父对象的引用。 parent 和 child 都将在 ->section 属性中拥有相应的部分。

如果你现在想在你的 Blade 模板中显示一些内容层次结构,你可以将 $contents 变量传递给 View 并执行以下操作:

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

我注意到您的模型中有一个sequence 字段。我确信您希望内容按该字段排序。在这种情况下,您需要修改获取数据的方式:

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

关于php - Laravel 5 - Elequent GROUP BY 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com