CakePHP保存具有相似数据的模型
我有以下代码。我正在努力使它更简单、更短。我创建了CakePHP保存具有相似数据的模型,php,cakephp,cakephp-2.3,Php,Cakephp,Cakephp 2.3,我有以下代码。我正在努力使它更简单、更短。我创建了$data1数组,并使用array\u merge添加了相关数据,并将其保存到我的模型中。但是请注意,$data1和$exists中有相同的代码。是否可以将$data1数组传递给MyModel的find方法而不重写相同的代码 因为我需要在这些代码段中创建多行,所以我使用了MyModel->create。在这段代码中,我粘贴了两个块,但最初我有6个这样的块。所以缩短对我来说很重要 总结如下: 我需要缩短这个代码段,我不想在每个块中重写相同的数据
$data1
数组,并使用array\u merge
添加了相关数据,并将其保存到我的模型中。但是请注意,$data1
和$exists
中有相同的代码。是否可以将$data1
数组传递给MyModel的find方法而不重写相同的代码
因为我需要在这些代码段中创建多行,所以我使用了MyModel->create
。在这段代码中,我粘贴了两个块,但最初我有6个这样的块。所以缩短对我来说很重要
总结如下:
我需要缩短这个代码段,我不想在每个块中重写相同的数据
$usersNew=array("mike", "john");
$usersLost=array("anna", "maria");
$data1 = array('userid' => $userid,
'date' => date('Y-m-d')
);
foreach ($usersNew as $f) {
$data2 = array_merge($data1, array("users_new" => $f));
$exists=$this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.users_new' => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data2);
}
}
foreach ($usersLost as $f) {
$data2 = array_merge($data1, array("users_lost" => $f));
$exists=$this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.users_lost' => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data2);
}
}
对于代码的优化,也许这不是一个最好的问题。还有其他的兄弟姐妹,比如。我只是建议,因为也许你会在那里找到更好或更专注的答案 但是,说到这里。在这种情况下,我通常做的是有一个这样的额外数组
$helper = array('usersNew'=>'users_new',
'usersLost'=>'users_lost',
/* name of array you want to loop => name of column in db */ );
这就像拥有代码中可变部分的数组。我使用的是你的精确代码,但如果你将来需要更复杂的东西,多维数组会更好
因此,您只需执行一个foreach
,并遍历$helper
数组中的所有变量
$usersNew=array("mike", "john");
$usersLost=array("anna", "maria");
//I prefer to avoid merge performance, so I'm deleting this, though it works
/*$data1 = array('userid' => $userid,
'date' => date('Y-m-d')
);*/
foreach ($helper as $arrayName => $dbCondition) {
foreach ($$arrayName as $f) {
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
$dbCondition => $f
);
$exists = $this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.'.$dbCondition => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data);
}
}
}
我还没有测试代码,但是它应该可以在没有任何修改的情况下工作,可能是我丢失了一个结尾或类似的东西
如果出于某种原因,这段代码会给您带来问题(有时会发生在我身上)
分两部分做
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
);
$data[$dbCondition] = $f;
诀窍是使用双
$
()并以适合您的方式组织$helper
数组。我希望我已经说得够清楚了。还感谢您提供代码审阅链接。我不知道那个网站。
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
);
$data[$dbCondition] = $f;