首页 > 解决方案 > 在 Eloquent 中将连接数据作为平面数组与子关系返回

问题描述

我有一对多的关系(在我的情况下是递归的)

class Category extends Model
{
    use HasFactory;

    public $selectable = [
        'id', 'category', 'parent_category'
    ];


    public function parent()
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }
}

我想和他们的孩子一起退货。我正在做的是这样的:

$data = Category::with('children')->get();

但它返回项目集合的数组。列表非常好,但不适用于网格等表格视图。我基本上想返回这样的东西(一个平面数组):

id   | category   | child_category
------------------------------------
1    | cat1       | subcat1
------------------------------------
1    | cat1       | subcat2
------------------------------------
1    | cat1       | subcat3
------------------------------------
2    | cat2       | subcat4

我知道我可以使用自定义查询生成器,但出于特定原因我正在尝试使用 Eloquent。

我还尝试将列名传递给关系(认为这可能让我更接近解决方案),如下所示:

$data = Category::with('children: category')->get();

但它甚至给了我一个错误:

Unknown column ' category'

我试过了toArray()flatten()但它们没有用(或者我没有以正确的方式使用它们)。这里有什么帮助吗?

标签: laraveleloquentlaravel-8

解决方案


推荐阅读