2014-10-27 40 views
1

當我使用save()方法或使用分開的調用如createupdate時,如何強制laravel始終創建新記錄。例如,我想從表中獲取一些記錄,修改它們並將它們保存爲新記錄。在Laravel中選擇,修改並插入結果作爲新記錄

$products = Product::where('category_id', 10)->get(); 

foreach($products as $product){ 
    $product->name = 'new name'; 
    $product->save(); 
} 

上面的腳本,更新記錄,在phalconphp我可以是具體的,說$product->create()和新的記錄將創建。

Laravel可能嗎?

+0

這是你說的‘修改它們,並將它們保存爲新的記錄’的意思不是很清楚。您需要更新現有記錄並同時插入? – geoandri 2014-10-27 11:11:15

+0

我想他不想更新記錄,只是修改結果並保存爲另一個記錄,...我是對嗎? – Ceeee 2014-10-27 11:14:36

+0

@Cedie是的。這正是我想要做的。 – Pars 2014-10-27 11:17:03

回答

3

下面是克隆使用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(); 
} 
+0

是的,謝謝,這是我一直在尋找的方式。我不知道爲什麼沒有提到複製()在文檔中... – Pars 2014-10-27 11:28:40

+0

@Pars你可以瀏覽http://laravel.com/api/4.2/尋找功能 – Ceeee 2014-10-27 14:06:12

1

爲什麼不......

$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(); 
} 
+0

我的產品表有30列,我只想編輯1列或2列,這不是最好的方法。我認爲。 – Pars 2014-10-27 11:18:47

+2

@Cedie或者你可以爲了簡單使用; Product :: create($ product-> toArray()),如果模型上的可填寫屬性已設置,它將自行排序。 – 2014-10-27 11:18:53

+0

@Pars啊,我看到:)對不起 – Ceeee 2014-10-27 11:19:06

0

也許你需要像下面這樣?創建一個新產品,並從現有產品中設置它的屬性或分配一個新值。

$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(); 
}