Почему первый вызов метода ::create() не устанавливает поле id в модели в Laravel?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему первый вызов метода ::create() не устанавливает поле id в модели в Laravel?

Сообщение Anonymous »

Я использую Laravel 5.5 и October CMS 1.0 с базой данных MySQL 5.6 и PHP 7.4.
У меня есть несколько моделей с ключами целочисленного автоинкремента id.
Настройки модели по умолчанию остались неизменными — я не изменил ни одного из параметров, связанных с ключами.
Я могу воспроизвести проблему с помощью самой простой модели — с помощью int $id и строки Только свойства $test.
Что происходит:
Когда я вызываю метод из шаблона Twig в свой контроллер, первый вызов ::create вернет модель с $id, установленным в 0.
Обе записи создаются в базе данных.
После этого каждый вызов ::create() вернет модель с правильно установленным $id.
Я потратил некоторое время на изучение этого вопроса в Интернете, и единственная проблема, связанная с моей проблемой, была связана с телескопом, которым я не пользуюсь.
База данных поля имеют определенный первичный ключ.
Как я уже упоминал, только первый вызов завершается неудачно. Каждый последующий вызов будет работать нормально.
Мой текущий способ решения этой проблемы заключался в создании фиктивной таблицы, в которой я создавал записи, прежде чем продолжить логику функции.
Это глупо, но позволяет мне продолжить, прежде чем прикидывать решить проблему.
Я не уверен, с чего начать поиск.
Хуже всего то, что эта проблема не затрагивает мои сеялки. Там модели прекрасно получают $id сразу после первого вызова создания.
Любые идеи приветствуются.
код, который я использовал для тестирования:
Таблица базы данных:
create table if not exists inx_test_table
(
id int unsigned auto_increment primary key,
name varchar(64) not null,
created_at timestamp null,
updated_at timestamp null
) collate = utf8mb4_unicode_ci;

Ветка:


{{
form_open({
'data-request': __SELF__ ~ "::onTestModel",
'data-request-success': 'testUpdate(data)'
})
}}

{{ form_input( 'text', 'test_input', '') }}

First ID: Second ID:



{{ form_button ('Annuler', {'data-dismiss':'modal', 'class': 'btn btn-secondary'} ) }}

{{ form_submit ('Suite ...', {'class': 'btn btn-primary' } )}}


{{ form_close() }}




function testUpdate(data) {
console.log(data);
$('#first_id').text(data.first_id);
$('#second_id').text(data.second_id);
}


Функция в контроллере:
public function onTestModel() {
$data = input();
$model1 = TestModel::create([
'name' => $data['test_input']
]);
$model2 = TestModel::create([
'name' => $data['test_input']
]);

return ["first_id" => $model1->id, "second_id" => $model2->id];
}

Модель:


Подробнее здесь: https://stackoverflow.com/questions/791 ... he-model-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»