gpt4 book ai didi

php - PhalconPHP Framework - 如何更新模型对象和相关对象

转载 作者:可可西里 更新时间:2023-11-01 13:32:23 24 4
gpt4 key购买 nike

我正在使用 PhalconPHP,到目前为止我遇到的问题很少。

框架很好。

但是,我遇到了一个无法解决的问题。这可能是一件非常简单的事情,但我一直在兜圈子,找不到任何关于这个问题的引用。

问题是,如果我还更新相关实体,则无法更新模型对象。

例如,假设我有几个模型类。

联系方式:

class Contact extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->belongsTo('email_id', 'Email', 'id', ['alias' => 'Email']);
}
}

和电子邮件:

class Email extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasMany('id', 'Contact', 'email_id', ['alias' => 'Contacts']);
}
}

当我尝试创建一个新的ContactEmail 时,效果如下:

$contact = new Contact();
// ... assign other fields here (i.e. name)
$email = new Email();
// ... assign other email fields here (i.e. address)
$contact->setEmail($email); // or $contact->email = $email;
$contact->save();
// record created

但是,当我尝试更新 Contact 并更改 Email 关系时,信息并没有更新:

// Only update other fields
$contact->name = 'Some other name';
$contact->save(); // This works

// Update the related object
$contact->name = 'A new name';
$contact->setEmail($anotherValidEmail);
$contact->save(); // This doesn't work! Not even the name field is updated

我试过使用 update() 而不是 save()

我也尝试过使用 $contact->email = $newEmailObject,但我得到了相同的结果。

有人遇到过这个问题吗?我做错了什么?

我正在使用 Mac OS X,PhalconPHP 1.2.3

我还在 Windows 8 上用 PhalconPHP 1.1.0 测试过它

感谢任何帮助。

已更新

我在 save() 之后打印了 $contact->getMessages() 的结果,但是我没有得到任何结果。好像save()成功了,但是没有执行SQL语句。

上次更新:已复制问题并找到解决方法!

我们已经能够重现该问题。我们这样做:

$contact = Contact::findFirst(123);
if ($contact->email->emailaddress != $newaddress) {
$email = new Email();
$email->emailaddress = $newaddress;

$contact->email = $email;
$contact->save();
}

这行不通!一旦我们将来自电子邮件相关对象的电子邮件地址字段与用于新地址保存的字符串进行比较,则不起作用。

但是,如果我们稍微修改一下代码并执行以下操作:

  $contact = Contact::findFirst(123);
if ($contact->email->emailaddress != $newaddress) {
$email = new Email();
$email->emailaddress = $newaddress;

// Load the record (again!)
$contact = Contact::findFirst(123);
$contact->email = $email;
$contact->save();
}

这确实有效。

我猜想加载相关对象会影响更新该特定字段的能力,并且再次找到联系人对象会刷新相关对象。

因此,我们有一个解决方法,我希望它能帮助其他面临同样问题的人。

最佳答案

当你使用$contact->setEmail($anotherValidEmail);时,你必须在Contact模型Contact中有set和get方法。例如:

Class Contact
{

public $email;

public function setEmail($email)
{
}
public function getEmail()
{
return $this->email
}
}

关于php - PhalconPHP Framework - 如何更新模型对象和相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com