【问题标题】:Laravel 5 replicate() handle columns that have unique attributeLaravel 5 replicate() 处理具有唯一属性的列
【发布时间】:2016-05-21 15:38:43
【问题描述】:

我正在使用模型的 laravel 的 replicate() 方法来生成现有实例的副本。如果没有要成为 unique 的列,它工作正常。

就我而言,有些列是唯一的,所以我使用它

    $pr = Products::find(\Input::get('id'))->replicate();
    $pr['product_code'] = $pr->product_code . '_'.$pr['id'];
    $pr['name'] = $pr->name . '_'.$pr['id'];
    $pr->save();

这将确保如果产品被复制一次,它将处理唯一列问题。但是如果产品再次被复制,它会再次导致问题。

我该如何解决这个问题

【问题讨论】:

    标签: mysql laravel laravel-5 eloquent unique


    【解决方案1】:

    我会在数据库中将 product_codename 设置为可空值,然后执行以下操作:

    $product = Products::find(\Input::get('id'));
    $newProduct = $product->replicate(['product_code', 'name']);
    $newProduct->save();
    $newProduct->product_code = $product->product_code.'_'.$newProduct->id;
    $newProduct->name = $product->name.'_'.$newProduct->id;
    $newProduct->save();
    

    当然,您可以将其包装成一个函数,以防您在多个地方执行此操作。

    【讨论】:

      【解决方案2】:

      最近遇到这个问题,最有效的就是使用unix时间戳。这是另一个示例,可让您更好地了解正在发生的事情,而无需将字段设为空等。

          $page = Page::find($id);
          $duplicatePage = $page->replicate();
          $duplicatePage->name = 'Copy of ' . $page->name;
          $duplicatePage->slug = $page->slug . '-' . time();
          $duplicatePage->save();
      

      【讨论】:

        【解决方案3】:

        @Marcin Nabiałek's answer 之后,我通过一些小改进解决了这个问题

        $product = Products::find(\Input::get('id'));
        $newProduct = $product->replicate();
        $newProduct->save();
        $newProduct->product_code = str_replace("_".$product->id,"",$product->product_code).'_'.$newProduct->id;
        $newProduct->name = str_replace("_".$product->id,"",$product->name).'_'.$newProduct->id;
        $newProduct->save();
        

        这将从名称和产品代码中删除 old _id,以删除末尾已经有 _id 的条目,然后添加 new _id

        【讨论】:

          猜你喜欢
          • 2015-12-09
          • 2013-06-25
          • 2015-09-20
          • 1970-01-01
          • 2014-04-19
          • 2021-01-10
          • 1970-01-01
          • 2020-01-11
          相关资源
          最近更新 更多