Дублированные данные Laravel Nova

это мой первый раз, когда я использую laravel nova, я хочу сохранить свои данные в 2 таблицы, первая сохраняет базовые данные, а вторая сохраняет данные истории. В моей таблице предметов я сохраняю идентификатор, код, имя, цену и мою таблицу Item_Codes, сохраняя item_id и код, я понял. Моя проблема в том, что при сохранении данных в Item_Codes сохраняется два раза

Я использую Laravel Observer, это моя сохраненная функция ItemObserver

public function saved(Item $item)
{
    DB::table('item_codes')->insert(
        [
            'item_id' => $item->id,
            'code' => $item->current_code,
            'created_by' => $item->created_by,
        ]
    );
}

и это мой ресурс элемента

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),

        Text::make('Original code', 'original_code')
            ->sortable()
            ->rules('required', 'string', 'max:255')
            ->hideFromIndex(),

        Text::make('Current code', 'current_code')
            ->sortable()
            ->rules('required', 'string', 'max:255'),

        Text::make('Name', 'name')
            ->sortable()
            ->rules('required', 'string', 'max:255'),

        Textarea::make('Description', 'description')
            ->rules('required')
            ->creationRules('required', 'string'),

        Number::make('Cost', 'cost')
            ->sortable()
            ->rules('required')
            ->min(1),

        Number::make('Minimum price', 'minimum_price')
            ->sortable()
            ->rules('required')
            ->min(1),

        Text::make('ABCD Classification', 'abcd_classification')
            ->sortable()
            ->rules('required', 'string')
            ->hideFromIndex()
            ->hideWhenCreating()
            ->hideWhenUpdating(),

        BelongsToMany::make('Categories'),

        new Panel('Stock', $this->stockFields()),
        new Panel('Tracking', $this->trackingFields()),
    ];
}

Это моя модель предмета

class Item extends Model{

/**
 * The attributes that aren mass assignable.
 * 
 * @var array
 */
protected $fillable = [
    'original_code',
    'current_code',
    'name',
    'description',
    'current_stock',
    'unavailable_stock',
    'cost',
    'minimum_price',
    'abcd_classification'
];

/**
 * The attributes that aren't mass assignable.
 * 
 * @var array
 */
protected $guarded = [
    'created_by',
    'updated_by'
];

/**
 * 
 * Providers
 * 
 * Returns the items providers
 * 
 * @return collection
 */
public function providers()
{
    return $this->belongsToMany('App\Models\Provider');
}

/**
 * 
 * Categories
 * 
 * Returns the items categories
 * 
 * @return collection
 */
public function categories()
{
    return $this->belongsToMany('App\Models\Category');
}
}

Извините за мой плохой английский, надеюсь на ваши ответы


person Chicky Ng    schedule 14.02.2019    source источник
comment
Вы хотите сделать это при создании, обновлении или и то, и другое?   -  person Tpojka    schedule 14.02.2019
comment
Я просто хочу, чтобы, когда я сохраняю элемент в своих items_tables, он также сохранится в item_codes   -  person Chicky Ng    schedule 15.02.2019
comment
Дело в том, что метод saved вызывается как для created, так и для updated. Сначала я бы заподозрил кое-что в этом. Если он вам нужен только при создании объекта, поместите его в тело метода created not saved.   -  person Tpojka    schedule 15.02.2019
comment
Я попытался использовать метод created, и он тоже был спасен два раза   -  person Chicky Ng    schedule 15.02.2019
comment
Срабатывает дважды где-нибудь в приложении. Дважды проверьте кодовую базу (написанного вами кода). Вы используете какие-то пары событие / слушатель? Может там?   -  person Tpojka    schedule 15.02.2019
comment
У меня больше нет триггеров, и нет, я использую функцию для сохранения элемента и функцию наблюдателя для сохранения item_codes   -  person Chicky Ng    schedule 15.02.2019
comment
Этот код с полевым методом мало что говорит. Покажите код, в котором вы делаете вставку (возможно, контроллер).   -  person Tpojka    schedule 15.02.2019
comment
Код, в который я вставляю элемент, - это функция полей, потому что я работаю с laravel nova   -  person Chicky Ng    schedule 15.02.2019
comment
Я думаю, вам также следует спросить где-нибудь на форумах Nova или что-то в этом роде. Может быть, обратиться в службу поддержки, так как это платный вариант для предприятий, я уверен, они будут рады вам помочь. Я старался изо всех сил, но я не уверен в представленном там коде. : /   -  person Tpojka    schedule 15.02.2019


Ответы (1)


Убедитесь, что вы не дублируете вызов Observer в AppServiceProvider и NovaServiceProvider.

Вы должны вызвать его только один раз в NovaServiceProvider.

person Tarek Hassan    schedule 18.03.2021