如何在Laravel中建立父母/子女关系?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Laravel中建立父母/子女关系?相关的知识,希望对你有一定的参考价值。

我在laravel 6.0.4中有此模型:

class CategoryModel extends Model

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

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

和控制器

class CategoryController extends Controller

    public function index()
    
        CategoryModel::with('children')->get(); // this is working
        CategoryModel::with('parent')->get(); // this is not working
    

这里是架构

Schema::create('category', function (Blueprint $table) 
    $table->bigIncrements('id');
    $table->unsignedBigInteger('parent_id')->nullable();
    $table->string('name');

    $table->index(['parent_id']);
    $table
        ->foreign('parent_id')
        ->references('id')
        ->on('category')
        ->onDelete('set null')
        ->onUpdate('set null');
);

我可以得到孩子,但对于父母,它为所有记录返回一个空数组。

答案

尝试一下:

public function parent()

    return $this->hasOne(CategoryModel::class, 'id', 'parent_id');


public function children()

    return $this->hasMany(CategoryModel::class, 'parent_id', 'id');

另一答案

您可以使用下面的代码与自类建立关系:

public function parent()

     return $this->belongsTo('App\CategoryModel','parent_id')->where('parent_id',0)->with('parent') ;


 public function children()
 
   return $this->hasMany('App\CategoryModel','parent_id')->with('children');

以上是关于如何在Laravel中建立父母/子女关系?的主要内容,如果未能解决你的问题,请参考以下文章

父母与子女之间的关系不起作用

多对多关系 GAE NDB 需要父母还是子女?

子女有恩论

在组合键上使用“链接”外键的问题

我如何在 laravel 中建立深层关系?

子女离婚不随父母离婚而动