我使用 Laravel 5.5 和 October CMS 1.0 以及 MySQL 5.6 数据库和 PHP 7.4。 我有几个带有整数自动增量
id
键的模型。
模型的默认设置保持不变——我没有更改任何与键相关的选项。
我能够使用最简单的模型重现该问题 - 仅使用
int $id
和 string $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;
树枝:
<div class="modal-body">
<div class="container">
{{
form_open({
'data-request': __SELF__ ~ "::onTestModel",
'data-request-success': 'testUpdate(data)'
})
}}
<div class="row">
{{ form_input( 'text', 'test_input', '') }}
</div>
<div class="row ">
<div>First ID: <span id="first_id"></span></div><div style="margin-left: 1rem">Second ID: <span id="second_id"></span></div>
</div>
<div class="d-flex justify-content-around mt-5">
<div>
{{ form_button ('Annuler', {'data-dismiss':'modal', 'class': 'btn btn-secondary'} ) }}
</div>
<div>
{{ form_submit ('Suite ...', {'class': 'btn btn-primary' } )}}
</div>
</div>
{{ form_close() }}
</div>
</div>
<script>
function testUpdate(data) {
console.log(data);
$('#first_id').text(data.first_id);
$('#second_id').text(data.second_id);
}
</script>
控制器功能:
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];
}
型号:
<?php
/**
*
* @mixin \October\Rain\Database\Model
* @property int $id
* @property string $name
* @method static \October\Rain\Database\Collection|static[] all($columns = ['*'])
* @method static \October\Rain\Database\Collection|static[] get($columns = ['*'])
* @method static \October\Rain\Database\Builder|FormationsDuoTypes newModelQuery()
* @method static \October\Rain\Database\Builder|FormationsDuoTypes newQuery()
* @method static \October\Rain\Database\Builder|FormationsDuoTypes query()
* @mixin \Eloquent
* @noinspection PhpFullyQualifiedNameUsageInspection
* @noinspection PhpUnnecessaryFullyQualifiedNameInspection
*/
class TestModel extends Model
{
use \October\Rain\Database\Traits\Validation;
/**
* The connection associated with the model.
*
* @var string
*/
protected $connection = 'inx';
/**
* @var string The database table used by the model.
*/
public $table = 'test_table';
/**
* @var array Validation rules for attributes
*/
public $rules = [
'name' => 'required',
];
}
使用
NOT NULL
主键约束创建表
create table if not exists inx_test_table
(
id int unsigned NOT NULL auto_increment primary key,
...
)
并在您的模型中添加
$fillable
protected $fillable = [
'name'
];