我一直在努力弄清楚如何做到这一点,似乎很多人都没有在 cakephp 中尝试这样做,或者我只是完全误解了文档。我正在使用下面的查询来获取字段值,所以我得到一个值,其中“findbycreated”为 0...这部分工作正常
$unregisteredemail = $this->Testmodel->findBycreated('0');
$emailaddress = $unregisteredemail['Testmodel']['emailaddress'] ;
$emailpassword = $unregisteredemail['Testmodel']['password'] ;
但是现在,在我对检索到的这些数据进行一些操作之后,我想在同一行、同一模型/表中将一个字段标记为值“1”,以指示已采取操作地方(例如,电子邮件地址已成功创建)...尽管我努力阅读文档和搜索,但我还是不知道如何在 cakephp 中执行此操作,这应该很简单,我很想知道,在这一点,只使用常规的 mysql 查询作为一个简单的查询..基本上查询是(请原谅我的语法,因为我有一段时间没有使用直接的 mysql 查询)“更新(数据库/表)设置'创建' ='1' 其中 'emailaddress'=$emailaddress"
或者如果需要,我可以使用行 ID,因为 cakephp 似乎更喜欢这个,但仍然不知道如何做到这一点。这是我下面的尝试,但没有奏效:
// update database to show that email address has been created
$this->Testmodel->read('emailaddress', $this->Testmodel->findBycreated('0'))
$this->Testmodel->id = 1;
$this->Testmodel->set(array(
'created' => '1'
));
$this->Testmodel->save();
最佳答案
正如您从前面的答案中看到的那样,有几种方法可以达到相同的目的。我只想解释一下为什么您的方法不起作用。
在模型中,CakePHP 根据其 ORM 的实现将数据库行抽象为一个数组。 .这为我们提供了一种在 MVC 架构中操作数据和处理数据的简便方法。
当你说:
$this->Testmodel->set(array(
'created' => '1'
));
您直接与模型打交道,但数据实际上作为数组存储在名为 $data 的类变量中。要访问和操作这些数据,您应该说:
$this->data['Testmodel']['created'] => '1';
将模型名称指定为第一个索引的原因是,在检索关联表的地方,可以用相同的方式访问这些表,因此您可能有,例如:
Array([Testmodel] => Array ([id] => 1,
[created] => [1],
...
)
[Relatedmodel] => Array ([id] => 1,
[data] => asd,
...
)
)
……等等。非常方便。
现在,当您使用不带参数的 $this->
MyModelName
->save()
时,它默认使用 $this->data 并使用适合您调用保存方法的模型的数据数组部分。您还可以传递一组数据,如果出于某种原因您不(或不能)使用 $this->data
,则格式相同。
您对 read() 方法的使用不正确。第一个参数应该是 null、一个字符串或一个字符串数组(代表字段名)。第二个参数应该是您要读取的记录的 ID。相反,对于参数 2,您传递的是查找的结果,它将是一个数组。您没有捕获的结果将为空。
我会这样写你的代码:
$this->data = $this->Testmodel->read('emailaddress',1);
$this->data['Testmodel']['created'] = 1;
$this->Testmodel->save();
或更简洁:
$this->Testmodel->id = 1;
$this->Testmodel->saveField('created', 1);
关于database - CakePHP 根据同一行中的其他值更新字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235236/