Метод создания Laravel не возвращает значения первичного ключа, которые были вставлены Observer - PullRequest
0 голосов
/ 26 апреля 2019

Позвольте мне предисловие к этому сообщению, я не могу изменить метод вставки первичного ключа. Это разрабатывается на унаследованной системе, и я не имею никакого контроля над методом получения первичного ключа, я просто должен иметь с ним дело.

Я обнаружил, что Laravel не будет обновлять первичный ключ коллекции при использовании метода create с помощью наблюдателя, который вставляет значение первичного ключа.

Вот мой сценарий (я сократил модели и файлы для места):

файл миграции:

Schema::create('forms_maps', function (Blueprint $table) {
    $table->integer('id')->unsigned();
    $table->string('name');
});

ModelObserver.php:

public function creating(Model $model)
{
    $countername = strtolower(class_basename(get_class($model))).'s_id';
    $model->id = tap(\App\Models\OCounter::where('countername',$countername)->first())->increment('counterval')->fresh()->counterval;
    Log::debug("Creating ". strtolower(class_basename(get_class($model))) . ": " . $model);
}

DatabaseSeeder.php:

$accountApp = \App\Models\FormsMap::create(['name' => 'Account Application']);
Log::debug("Created formsmap: " . $accountApp);

Выходной журнал:

Creating formsmap: {"name":"Account Application","id":84}
Created formsmap: {"name":"Account Application","id":0}

Как видно из журнала, когда запись создается с помощью метода create внутри наблюдателя, я получаю правильный идентификатор; однако это значение не передается обратно в коллекцию в DatabaseSeeder. Я смотрю на это неправильно? Должен ли я использовать что-то еще, чтобы вставить значения в таблицы? Я не хочу вставлять это значение вручную / в строке, потому что каждая модель должна вводить эту информацию.

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2019

GRRR !!!!Я делаю это каждый раз!Ответ:

В модели необходимо отключить приращение.

class FormsMap extends Model
{
    public $timestamps = false;
    public $incrementing = false;

    ...
}

Хех!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...