Каждый раз, когда я редактирую экземпляр моей Laravel модели Nova, которая используется в отношении morphTo, в мою таблицу morphTo добавляется другая строка, и я получаю дубликаты. Интересно, что с этим? Я не хочу новых отношений morphTo, я только что отредактировал одну из уже существующих записей. Я записал свой экран, чтобы лучше объяснить, что происходит:
https://www.dropbox.com/s/1194opl9t68mpx3/error.mov?dl=0
В основном после редактирования записи PageCommon моя таблица морфинга выглядит следующим образом:
1 1 App\PageCommon 2019-12-03 12:35:36 2019-12-03 12:35:36
11 1 App\PageCommon 2020-01-14 20:02:43 2020-01-14 20:02:43
Если я снова отредактирую страницу PageCommon с идентификатором 1, я получу три записи и т. Д. c.
Код довольно стандартный:
Моя модель содержимого:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Content extends Model
{
protected $table = 'content';
public function contentable()
{
return $this->morphTo();
}
}
Моя Laravel Модель содержимого Nova Model
<?php
namespace App\Nova;
use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\MorphTo;
class Content extends Resource
{
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = 'App\Content';
/**
* Get the displayable label of the resource.
*
* @return string
*/
public static function label()
{
return __('Contents');
}
/**
* Get the displayable singular label of the resource.
*
* @return string
*/
public static function singularLabel()
{
return __('Content');
}
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'id';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'id',
];
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
ID::make()->sortable(),
MorphTo::make('Contentable')->types([
PageApp::class,
PageCommon::class,
]),
];
}
/**
* Get the cards available for the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function filters(Request $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function lenses(Request $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function actions(Request $request)
{
return [];
}
}
И, наконец, две изменяемые модели:
<?php
namespace App;
class PageApp extends Page
{
public static $type = "PageApp";
public function content()
{
return $this->morphOne('App\Content', 'contentable');
}
}
и
<?php
namespace App;
class PageCommon extends Page
{
public static $type = "PageCommon";
public function content()
{
return $this->morphOne('App\Content', 'contentable');
}
}