我有一个允许创建任务的应用程序。任务属于活动。
我在广告系列详细信息页面上有一个创建按钮,如果用户单击该按钮,则URL将如下所示:
http://demo.test/nova/resources/tasks/new?viaResource=campaigns&viaResourceId=1&viaRelationship=
。
如您所见,我添加了resource id
,因此在创建任务时可以使用它们。像这样:
$campaign = Campaign::find($request->viaResourceId);
...
Select::make('Campaign', 'campaign_id')
->options([$campaign->id => $campaign->name])
->displayUsingLabels()
->withMeta(['value' => $campaign->id])
->hideWhenUpdating()
->readonly(true),
该代码有效,除非我将BelongsTo
字段用于其他关系(在本例中为任务组)。似乎BelongsTo
字段发出了另一个请求,并且没有在URL中附加viaResourceId
,因此我无法访问我的campaign
变量。例如,$campaign->id
->我收到错误:Trying to get property 'id' of non-object
答案 0 :(得分:1)
将字段部分中的app \ Nova \ Task.php更改为此:
public function fields(Request $request)
{
if($request->editMode=="create" && !empty($request->viaResource) && !empty($request->viaResourceId)){
$campaign = Campaign::find($request->viaResourceId);
return [
ID::make()->sortable(),
Text::make('Name')->sortable(),
Select::make('Campaign', 'campaign_id')
->options([$campaign->id => $campaign->name])
->displayUsingLabels()
->withMeta(['value' => $campaign->id])
->hideWhenUpdating()
->readonly(true),
BelongsTo::make('Group')->display('name'),
];
}
return [
ID::make()->sortable(),
Text::make('Name')->sortable(),
BelongsTo::make('Campaign')->display('name'),
BelongsTo::make('Group')->display('name'),
];
}
我在nova草案项目中检查了它,它运行良好,没有任何错误!