单独使用雄辩有可能吗?
// build doc tree
public function tree()
{
$docs = app(config('lap.model.doc'))->with(['children.parent', 'children' => function ($query) {
return $query->orderBy('order');
}])->whereNull('parent_id')->orderBy('order')->get()->toArray();
$docs_array = [];
foreach ($docs as $doc)
{
$docs_array[] = array_except($doc, 'children');
if ($doc['children']) {
foreach ($doc['children'] as $child) {
$docs_array[] = $child;
}
}
}
return $docs_array;
}
很好奇,因为尽管按照我希望的方式进行了工作,但我想知道框架功能中是否已经存在更好的解决方案。
答案 0 :(得分:0)
类似的事情可以在SQL中使用:
<mat-form-field>
<mat-icon matSuffix>search</mat-icon>
<input [formControl]="selectedOption"
placeholder="Select and Option"
matInput
[matAutocompleteDisabled]="disablePanel"
[matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn">
<mat-option *ngFor="let option of filteredOptions " [value]="option">
{{option.name}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
即如果没有parent_id,则select t.*
from t
order by coalesce(t.parent_id, t.id), `order`
;
函数将使用id。这样可以将父母和子女的家庭“聚在一起”,然后家庭中的行可以使用“订单”列。
虽然我对Laravel不熟悉,但我相信可以像这样使用orderByRaw:
coalesce
另请参见this answer
如果使用orderByRaw('coalesce(parent_id, id), `order`')
函数存在问题,则可以在SQL中使用此替代方法:
coalesce
select t.*
from t
order by case when t.parent_id IS NULL THEN t.id else t.parent_id end, t.`order`
;
可以转换成case expression
供我怀疑的Laravel使用。