我有一个模型,其中子模型与父母有这种关系:
public function children()
{
return $this->hasMany(self::class, 'parent_id', 'unique_id')->orderBy('id', 'asc');
}
我的表格如下:
$table->increments('id');
$table->integer('project_id')->unsigned();
$table->string('type');
$table->unsignedBigInteger('unique_id');
$table->bigInteger('parent_id')->unsigned()->nullable();
$table->integer('order')->nullable();
$table->timestamps();
$table->unique(['unique_id', 'project_id'], 'abcd')->unsigned();
$table->foreign('project_id')->references('id')->on('projects')->onUpdate('cascade')->onDelete('cascade');
unique_id字段仅对每个项目唯一,这就是我这样做的原因:$table->unique(['unique_id', 'project_id'], 'abcd')->unsigned();
然而,如果我有2个项目,2个属于不同项目的父母和2个属于父母的子模型,则之前定义的关系将失败。
Project 1
Project 2
Model 1
uniqueId: 123
projectID: 1
Model 2
uniqueId: 1234
parentId: 123
projectId: 1
Model 3
uniqueId: 123
projectID: 2
Model 4
uniqueId: 1234
parentId: 123
projectId: 2
当我加载项目1的编辑页面时,我看到模型1有两个子模型:模型2和模型3
如何定义子关系定义关系只有属于同一个项目才有效?
我试过这个
public function children()
{
return $this->hasMany(self::class, 'parent_id', 'unique_id')->where('project_id', $this->project_id)->orderBy('id', 'asc');
}
但它失败了,我做了dump($this->project_id)
并打印出null。那么project_id
似乎不可用,我不能限制返回的内容?
有没有人知道如何解决这个问题?
答案 0 :(得分:1)
我认为这是一个可以通过适当的规范化表格避免的问题,我个人的建议是你将parent_id和unique_id带入另一个模型,这样你就没有在parent_id中有空值的行