2

我有2个模型:

Mail有关系的类:

'relAttachments' => array(self::MANY_MANY, 'File', 'rel_mail_file(rel_mail, rel_file)'),

Mail附加了AdvancedArBehavior扩展,因此我可以使用 1-liner 将附件链接到它,我喜欢这样:

$mail->relAttachments = $attachments; // $attachments is an array of ids for `File` models

Mailque有关系的类:

'relMail' => array(self::BELONGS_TO, 'Mail', 'rel_mail'),

保存并链接 Mail 和 Mailque 后,我在发送邮件后运行此代码:

$mail = Mail::model()->findByPk($id);
$mailModel = $mail->relMail;

var_dump(count($mailModel->relAttachments));  // outputs 1

$mailModel->sent = time();
$mailModel->save();
//$mail->delete();

调用 save() 会产生以下错误:

exception 'CException' with message 'Property "File.rel_file" is not defined.' in ...\framework\base\CComponent.php:131

有谁知道这里发生了什么?

4

2 回答 2

2

看起来您需要在文件模型中定义一个公共变量。

试试这个......在文件类

public $rel_file = 'id';
于 2012-09-26T06:19:15.127 回答
0

或者你可以从源头杀死它:)

在 /protected/extensions/CAdvancedArBehavior.php

注释掉第 165 行并将其替换如下:

// $foreignobject = $foreignobject->{$foreignobject->$relation['m2mForeignField']};
$foreignobject = $foreignobject->getPrimaryKey();

我在 Yii 论坛上得到了这个补丁,它解决了我的问题,而不需要 SuReVa 的破解。我通过保存和加载一些 m2m 模型关系进行了一些测试,看起来还不错,尽管我没有对其进行广泛测试。

于 2012-10-17T03:40:54.290 回答