【问题标题】:Laravel model is created with id = 0Laravel 模型是用 id = 0 创建的
【发布时间】:2017-08-18 07:29:13
【问题描述】:

我在 eloquent 方面遇到问题。 这是一些代码:

$BaseTask = $TaskClass::create([
        'user_id' => $User->id,
        'task_type' => $this->task_type,
        'name' => $this->settings['name'],
        'task_' . $this->social_network . '_list_id' => $task_list_id,
]);
$BaseTask->accounts()->attach($account_id);

问题是 SOMETIMES 最后一行因外键约束而失败 - 它尝试使用查询更新数据透视表

insert into pivot ('account_id', 'task_id') values (289530, 0))

不知何故:

$BaseTask->id=0;

但我有财产:

$incrementing=true;

也许有人遇到过这样的问题,任何帮助表示赞赏!

【问题讨论】:

  • 在您的数据库上配置正确吗?
  • 是的,因为这种情况只是偶尔发生(大约 5% 的情况),也许有一些 db 的不良行为?
  • attach() 方法只适用于多对多,其他关系有 save() 和 associate()
  • 是的,我有多对多的关系
  • @МаксимСарвилин 试试 $BaseTask->accounts()->associate($account_id);让我知道工作与否

标签: php mysql laravel eloquent laravel-5.2


【解决方案1】:

我遇到了同样的问题,你需要把:

public $incrementing = false;

在模型上。

【讨论】:

    【解决方案2】:

    改用save() 方法,因为您没有多对多关系。如果您确实有很多使用sync() 功能,那么。也去database.php文件设置mysqlstrictfalse

    【讨论】:

    • 好的,然后使用 sync() 函数,我认为它也可以解决 id 的问题。
    • hm 你觉得“改变方法”会解决父模型id为0的问题吗?
    • 如果你想防止 id 上的零值;您可以将初始 AUTO_INCREMENT 值设置为正整数 - 但我相信它无论如何都以 1 开头。只是为了确定:ALTER TABLE table_name_here AUTO_INCREMENT = 1000;
    • auto_increment 已设置为任务表 - 它正在生产
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2019-07-28
    • 2018-01-06
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多