Laravel Nova嵌套关系

时间:2019-01-25 06:54:26

标签: php laravel laravel-nova

一天中的好时光!
最近,我一直在尝试创建Nova资源,该资源取决于提供主要资源信息的其他资源。

我有一个表 contest_entries ,其中包含以下字段:

  • id
  • contest_id
  • user_id

具有以下关系

    public function contest() : BelongsTo {
        return $this->belongsTo(Contest::class, 'contest_id', 'id');
    }

    public function user() : BelongsTo {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

此外,我还有一个表contest_submissions,其中包含以下字段:

  • id
  • entry_id
  • task_id
  • 评论
  • 批准
  • 拒绝 具有以下关系:
public function entry() : BelongsTo {
    return $this->belongsTo(ContestEntry::class, 'entry_id', 'id');
}

public function user() : BelongsTo {
    return $this->entry->user();
}

public function contest() : BelongsTo {
    return $this->entry->contest();
}

public function task() : BelongsTo {
    return $this->belongsTo(Task::class, 'task_id', 'id');
}

我在Nova的indexdetails视图上获取此数据没有问题,一切都“正常”,但是,当我尝试更新资源时,出现了错误user()上调用了contest()null

我尝试了以下方法,

return [
    BelongsTo::make('Contest', 'contest', Contests::class)->exceptOnForms(),
    BelongsTo::make('Task', 'task', ContestTasks::class)->exceptOnForms(),
    BelongsTo::make('User', 'user', AccountUsers::class)->exceptOnForms(),
]

但是由于某些原因,Nova仍然试图在我明确告诉他们不这样做时获取这些关系。

任何想法都可以得到极大的赞赏,因为它可以在update视图(除create视图之外的其他地方都可以使用(由于用户在前端创建了提交,因此明确禁用了{{1}}视图)

1 个答案:

答案 0 :(得分:0)

您还应该将hideWhenUpdating()约束链接到它。

return [
    BelongsTo::make('Contest', 'contest', Contests::class)
        ->hideWhenUpdating()
        ->exceptOnForms(),

    BelongsTo::make('Task', 'task', ContestTasks::class)
        hideWhenUpdating()
        ->exceptOnForms(),

    BelongsTo::make('User', 'user', AccountUsers::class)
        hideWhenUpdating()
        ->exceptOnForms(),
]