在Laravel中选择、修改和插入结果作为新记录


Select, Modify and Insert result as new record in Laravel

当我使用save()方法或使用像createupdate这样的分离调用时,如何强制laravel始终创建新记录
例如,我想从表中获取一些记录,修改它们并将它们保存为新记录。

$products = Product::where('category_id', 10)->get();
foreach( $products as $product ){
    $product->name = 'new name';
    $product->save();
}

上面的脚本,更新记录,在phalconphp中我可以具体说$product->create()和新记录会创建。

这在拉腊维尔可能吗?

以下是使用replicate:克隆模型的一种更简单的方法

$products = Product::where('category_id', 10)->get();
foreach( $products as $product )
{
    // Clone the model
    $clone = $product->replicate();
    // Apply any changes you want to the cloned model
    $clone->name = 'new name';
    // ...
    // Save the cloned/modified model as a different record
    $clone->save();
}

为什么不。。。

$products = Product::where('category_id', 10)->get();
foreach( $products as $product ){
    $new_product = new Product();
    $new_product->name = 'new name';
    $new_product->other_column = $product->other_column;
    $new_product->save();
}

也许您需要以下内容?创建一个新产品,然后根据现有产品设置其属性,或者指定一个新值。

 $products = Product::where('category_id', 10)->get();
 foreach( $products as $product ){       
 $newproduct = new Product;
 $newproduct ->name = $product->name;  // or assign a new value
 $newproduct ->attribute1 = $product->attribute1; // or assign a new value
 $newproduct ->attribute2 = $product->attribute2;// or assign a new value
 $newproduct ->attribute3 = $product->attribute3;// or assign a new value
 $newproduct ->save();
 }