【发布时间】:2018-02-23 14:35:31
【问题描述】:
我有一个模型,其中子模型与父模型有这种关系:
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 个属于不同项目的父级和属于父级的两个子模型,则前面定义的关系会失败。
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) 并且打印为空。所以project_id 在那个时候似乎不可用,我不能限制返回的内容?
有人知道如何解决这个问题吗?
【问题讨论】:
-
转储
this会打印什么?如果您对值进行硬编码,它是否有效? -
是的,如果我将 parent_id 设置为 1,效果会很好,然后它会返回内容。我猜 $this->parent_id 在我打印它时为 null,因为 sql 尚未执行,然后 value 为 null
-
你给谁装孩子?使用
with还是使用load?像这样的东西可以工作:MyModel::find(1)->load('children');