我正在使用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?我需要以不同方式设置我的弹性搜索模型吗?
答案 0 :(得分:4)
默认情况下,setAttributes
仅设置至少定义了一个验证规则的属性,或者 - 至少 - 定义为" safe" (通过safeAttributes()
或通过安全验证器)。
只需将呼叫更改为
,即可强制分配所有内容$index->setAttributes([
'given_name' => 'Test',
'family_name' => 'User',
'email' => 'test.member@test.com'
], false);
这告诉它也可以分配非安全属性。 但我通常更愿意确保the validation配置正确