2011-11-02 98 views
1

我是datamapper的新手。我试图将结果复制到新的ID时遇到问题。Codeigniter Datamapper保存为新ID

这是我的数据库简化表:

工作表

 
| id | property_id | name | type | 
| 1 | 1   | abc | i | 
| 2 | 2   | def | ii | 

属性表

 
| id | job_id | size | 
| 1 | 1  | 90 | 
| 2 | 2  | 40 | 


我怎么能自动根据作业ID 1复制一个新的工作转换成新工作/财产ID,如

工作表

 
| id | property_id | name | type | 
| 1 | 1   | abc | i | 
| 2 | 2   | def | ii | 
| 3 | 3   | abc | i | 

属性表

 
| id | job_id | size | 
| 1 | 1  | 90 | 
| 2 | 2  | 40 | 
| 3 | 3  | 90 | 

感谢您的帮助! :)

回答

3

在为DataMapper的过分热心版的文档:http://datamapper.wanwizard.eu/pages/clonecopy.htmlclonecopycopy将清除ID。下面是他们的榜样,只是跳过的更改部分:

// Let's save a new hosting plan 
$p = new Plan(); 

$p->name = 'The 100GB Plan'; 
$p->storage = 1000; 
$p->bandwidth = 2000; 
$p->databases = 5; 
$p->domains = 5; 
$p->emails = 50; 

$p->save(); 

// Now, lets make a copy of that saved plan and base a new one off of it 
$p = $p->get_copy(); 

// Change only what we need to 
$p->name = 'The Big 150GB Plan'; 
$p->storage = 1500; 
$p->bandwidth = 2500; 

// And now save a new record 
$p->save(); 
+0

谢谢,我会试试 –

+0

感谢您的帮助!现在我只需要弄清楚自己如何复制所有其他表关系与新的ID :) –

1

你也可以修改您检索对象,然后用save_as_new()将其保存为一个新的记录。

+0

如何使用save_as_new()没有我试图复制的ID?谢谢。它只是直接使用:$ j = new Job(); $ j-> where('id',1) - > get(); $ J-> save_as_new();非常感谢 –

+0

明白了,我只是清除了id值$ j-> id =''; –

+0

同样使用1.8.2 - 只需手动清除id并使用save(),save_as_new()似乎什么也不做。 –