【问题标题】:Laravel 4 One To Many Duplicate Entry After InsertingLaravel 4插入后一对多重复条目
【发布时间】:2014-10-15 13:51:27
【问题描述】:

我有一对多关联用户 -> 页面,我有这个代码:

    $user_id = Auth::user()->id;

    foreach ($pages_array['data'] as $page) {

        $page_record = new Page();

        $page_record->name = $page->name;
        $page_record->access_token = $page->token;
        $page_record->page_id = $page->id;

        User::find($user_id)->pages()->save($page_record);
    }

但是当我尝试插入它们时,我得到 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...

我的问题是:如果数据库中的记录不存在,我如何插入记录并在存在时跳过插入?非常感谢

p.p 对不起我的不好。

【问题讨论】:

  • 您的page_id 是自增字段吗?
  • 不,不是。默认情况下 id 是自动递增的
  • 如果您预计会发生这种情况并且没有办法解决它没有发生的情况,那么您可以将其放入 try catch 块中。另外,请随时使用Auth::user()->pages()->save($page_record)。它将为您节省对数据库的调用。
  • 谢谢。而且我不希望这种情况发生。我只想插入一条不重复的记录
  • 那并没有多大意义,因为如果它是一对多的,那么您期望许多页面具有重复的 user_id。您是否偶然在该列上放置了唯一索引?

标签: php mysql sql laravel eloquent


【解决方案1】:
$page_record = new Page();

$page_record->name = $page->name;
$page_record->access_token = $page->token;
$page_record->page_id = $page->id;

您正在创建一个新页面,但在保存之前您尝试将page_id 属性设置为id 属性,直到您在页面记录上调用save 后才会存在该属性。您收到错误是因为它试图为每个 page_id 列插入 null

【讨论】:

    【解决方案2】:

    您可以轻松使用 laravel 验证。当你设置规则时,你可以告诉 wich 列必须是唯一的。 http://laravel.com/docs/4.2/validation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2013-12-15
      • 2011-08-15
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多