Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel中创建父/子关系?_Php_Laravel - Fatal编程技术网

Php 如何在laravel中创建父/子关系?

Php 如何在laravel中创建父/子关系?,php,laravel,Php,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(Category

我在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');
}

您可以使用以下代码与self类建立关系:

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

我选择了这样的专栏

CategoryModel::select('id', 'name')->with('parent')->get();
我不知道我也应该选择父id。 现在它的工作与这个很好

public function parent()
{
    return $this->hasOne(CategoryModel::class, 'id', 'parent_id');
}

看起来你的逻辑有点混乱,你怎么能把父母和孩子的
FK
name
parent\u id
@Hamelraj按照你的模式添加模式
return$this->belongsTo(CategoryModel::class,'parent\u id')原因相同
父id
有很多次。但是您可以从
子对象
关系中获取父模型,它将返回子对象again@RezaT1994试着用hasOne代替belongsTo。我已经更新了答案。有全局作用域吗?没有全局作用域。这是来自查询的日志<代码>1=>数组:3[“查询”=>“从`category`中选择*,其中`category`.`parent\u id`=?和`parent\u id`=?”“绑定”=>数组:2[0=>11=>0]“时间”=>0.81]
仍然不起作用