database - CakePHP 根据同一行中的其他值更新字段值?

标签 database cakephp mysql

我一直在努力弄清楚如何做到这一点,似乎很多人都没有在 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/

相关文章:

mysql - 查找(和删除)重复用户的 SQL 语句

python - 在 Python 中访问标识符映射的有效方法

php - 为什么MySQL不支持毫秒/微秒精度?

php - 验证输入是否是链接

sql-server - 从 SQLCMD 重命名 SQL Server 数据库

php - 如何为 cakephp 中的某些操作禁用安全组件?

php - 添加到带有外键的表

mysql - SQL主键约束

cakephp - CakePHP2.0中如何用testAction传递参数

php - cakephp 1.3 对habtm相关数据进行分页