Я использую 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
Почему первый вызов метода ::create() не устанавливает поле id в модели в Laravel? ⇐ Php
Кемеровские программисты php общаются здесь
1731600392
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];
}
Модель:
Подробнее здесь: [url]https://stackoverflow.com/questions/79189545/why-the-first-call-to-create-method-will-not-set-the-id-field-on-the-model-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия