Yii2 elasticsearch setAttributes()不起作用

时间:2015-06-04 05:09:52

标签: php elasticsearch yii2

我正在使用Yii 2.1和Yii2-elasticsearch 2.0.3以及elasticsearch 1.5.0服务器来尝试索引Member模型以进行更强大的搜索。我有common\indexes\Member模型扩展yii\elasticsearch\ActiveRecord并设置我想要索引的属性。

namespace common\indexes;

use yii\elasticsearch\ActiveRecord;

class Member extends ActiveRecord {

    /**
     * @return array the list of attributes for this record
     */
    public function attributes() {
        // path mapping for '_id' is setup to field 'id'
        return ['id', 'given_name', 'family_name', 'email'];
    }
}

我无法在common\indexes\Member模型中设置我想要的属性。

我正在创建对象的新实例并尝试通过ActiveRecord setAttributes()方法设置属性值,但它似乎没有设置任何值。

$index = new common\indexes\Member();
$index->setAttributes(['given_name' => 'Test', 'family_name' => 'User', 'email' => 'test.member@test.com']);
$index->save();

这似乎创造了一个空记录。如果我逐个手动设置属性,一切似乎都有效,并且在elasticsearch数据库中创建了具有正确属性的记录。

$index = new common\indexes\Member();
$index->given_name = 'Test';
$index->family_name = 'User';
$index->email = 'test.member@test.com';
$index->save();

我是否正确使用setAttributes()方法进行弹性搜索ActiveRecord?我需要以不同方式设置我的弹性搜索模型吗?

1 个答案:

答案 0 :(得分:4)

默认情况下,setAttributes仅设置至少定义了一个验证规则的属性,或者 - 至少 - 定义为" safe" (通过safeAttributes()或通过安全验证器)。

只需将呼叫更改为

,即可强制分配所有内容
$index->setAttributes([
   'given_name' => 'Test', 
   'family_name' => 'User', 
   'email' => 'test.member@test.com'
], false);

这告诉它也可以分配非安全属性。 但我通常更愿意确保the validation配置正确