- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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']);
}
}
当我尝试创建一个新的Contact
和Email
时,效果如下:
$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/
我是一名优秀的程序员,十分优秀!