Php 如何在laravel中创建父/子关系?
我在laravel 6.0.4中有这个模型: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
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
nameparent\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]
仍然不起作用