Laravel Nova BelongsTo поле имеет ошибку при использовании с $ request-> viaResource - PullRequest
0 голосов
/ 24 июня 2019
  • Версия Laravel: 5.8
  • Версия Nova: 2.0.5
  • Версия PHP: 7.3
  • Операционная система и версия: MAC OS 10.14.4
  • Тип и версия браузера: Google Chrome 75.0.3770.100

Описание:

У меня есть приложение, позволяющее создать задачу.Задача принадлежит кампании.

У меня есть кнопка создания на странице сведений о кампании, если пользователь нажимает эту кнопку, 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 сделало еще один запрос, и оно не прикрепило viaResourceId в URL, поэтому я не смог получить доступ к моей переменной campaign.Например, $campaign->id -> Я получил ошибку: Trying to get property 'id' of non-object

1 Ответ

1 голос
/ 30 июня 2019

Измените 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, он работает нормально, никаких ошибок!

...