Почему я получаю повторяющиеся записи в моей таблице morphTo при редактировании экземпляра одной из изменяемых моделей? - PullRequest
1 голос
/ 14 января 2020

Каждый раз, когда я редактирую экземпляр моей 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');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...