我们目前正在使用我们的网络应用程序实施ElasticSearch。我们通过使用官方elasticsearch-php framework来做到这一点。我们已经将这一点直接用于模型测试,因为它对我们所有人来说都是新的。
public function afterSave()
{
$client = \Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'testindex',
'type' => 'user',
'id' => $this->id,
'body' => [
'id' => $this->id,
'name' => $this->firstname.' '.$this->lastname,
'email' => $this->email,
'test' => ''
]
];
$response = $client->index($params);
}
public function afterUpdate()
{
$client = \Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'testindex',
'type' => 'user',
'id' => $this->id
];
$params['body']['doc'] = [
'test' => 'test2'
];
$response = $client->update($params);
var_dump($client->update($params));
var_dump($response);
}
当我保存模型时,它会自动将其添加到ES,但是当我更新它时,它不会更新模型。当我var_dump()
回复时,它不会抛出任何错误。
array(4) { ["index"]=> string(11) "testindex" ["type"]=> string(5) "user" ["id"]=> string(5) "20604" ["body"]=> array(1) { ["doc"]=> array(1) { ["test"]=> string(5) "test2" } } }
array(4) { ["_index"]=> string(11) "testindex" ["_type"]=> string(5) "user" ["_id"]=> string(5) "20604" ["_version"]=> int(2) }
array(4) { ["_index"]=> string(11) "testindex" ["_type"]=> string(5) "user" ["_id"]=> string(5) "20604" ["_version"]=> int(3) }
我在这里做错了什么?
答案 0 :(得分:0)
如果您使用的是Phalcon,则可能是由update()
同时调用afterUpdate()
和afterSave()
引起的。您应该在echo
方法中放置几个afterSave()
;如果你看到它们两次就是问题。
您可以通过创建afterSave()
句柄更新和afterCreate()
句柄来阻止此行为。然后,您可以致电$model->create()
来创建模型,并通过调用$model->save()
来更新它们。
有关此行为的更多信息,请访问:https://docs.phalconphp.com/en/latest/reference/models.html#create-update-with-confidence