Skip to content

Instantly share code, notes, and snippets.

@ganyicz
Last active June 8, 2021 14:20
Show Gist options
  • Select an option

  • Save ganyicz/9a611f95171c9136758ea2d768eb5458 to your computer and use it in GitHub Desktop.

Select an option

Save ganyicz/9a611f95171c9136758ea2d768eb5458 to your computer and use it in GitHub Desktop.
Laravel Nova - relation fields
// Customer hasOne or belongsTo User
public function fields(Request $request)
{
return [
Text::make('Heslo', 'password')->onRelation('user'),
];
}
Field::macro('onRelation', function ($relation) {
/** @var \Laravel\Nova\Fields\Field $this */
return $this
->withMeta(['__relation' => $relation])
->resolveUsing(fn ($value, $model, $attribute) =>
optional($model->$relation)->$attribute
);
});
protected static function fillFields(NovaRequest $request, $model, $fields)
{
$model::saved(function ($model) use ($request, $fields) {
$relationFields = $fields
->filter(fn ($field) => isset($field->meta['__relation']))
->groupBy(fn ($field) => $field->meta['__relation']);
foreach ($relationFields as $relation => $fields) {
$relatedModel = $model->$relation()->firstOrNew();
parent::fillFields($request, $relatedModel, $fields);
$relatedModel->save();
}
});
return parent::fillFields($request, $model, $fields->reject(fn ($field) => isset($field->meta['__relation'])));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment