我正在使用laravel侦察员上传记录以在algolia中搜索。我已将搜索到的特征添加到我的模型中,并且一切正常。从laravel scout/algolia中排除特定记录
现在有一种情况,我不希望将某些记录添加到我的索引中,如果它们已设置状态I.E UNPUBLISHED。
在那里我可以评估状态字段并决定是否要将模型上传到索引?
我正在使用laravel侦察员上传记录以在algolia中搜索。我已将搜索到的特征添加到我的模型中,并且一切正常。从laravel scout/algolia中排除特定记录
现在有一种情况,我不希望将某些记录添加到我的索引中,如果它们已设置状态I.E UNPUBLISHED。
在那里我可以评估状态字段并决定是否要将模型上传到索引?
只需使用$model_name->unsearchable()
即可将其从Algolia索引中移除。
详情请参见该文档中的“删除记录”:https://laravel.com/docs/5.3/scout#removing-records
您可以使用方法toSearchableData()
并且如果状态为未出版,只是返回空数组和记录将被跳过。 否则只是返回$this->toArray()
。
它会做的。
如果我这样做,它仍然会打电话给agolia,但它是空白的。有没有办法阻止它呼出? – JaChNo
说我们有一个邮政模型,用布尔发表属性和模型厂播种我们的表如下:
$factory->define(App\Post::class, function (Faker\Generator $faker) {
$tile = $faker->realText(50);
$date = $faker->dateTime;
return [
'title' => $tile,
'body' => $faker->realText(500),
'published' => $faker->boolean(80),
'created_at' => $date,
'updated_at' => $date
];
});
比方说,我们将播种10条记录。
public function run()
{
factory(App\Article::class, 10)->create();
}
如果我们试图将toSearchableArray()方法中排除未公布记载,建议:
public function toSearchableArray()
{
if (! $this->published) {
return[];
}
// ...
}
当无欲无求帖子表,而不是忽略未公布记录通过返回一个空阵列,侦察员将不断向模型工厂询问发布的模型。
例如,如果两个种子纪录是随机未公布,侦察员将指数的所有10条(而不是8)无论如何,通过一个新的模型厂(用更换未发表那些发表集属性)。因此导致在algolia指数中有两个不存在的(在我们的表上)记录。非常混乱。
围绕这个我可以想到的“最新”方法是在模型的引导方法中听取保存/更新的事件(保存/更新不会削减它)。
protected static function boot()
{
static::saved(function ($model) {
if (! $model->published) {
$model->unsearchable();
}
});
static::updated(function ($model) {
if (! $model->published) {
$model->unsearchable();
}
});
parent::boot();
}
看看这个问题。这个问题已经在新版本的Scout中解决了 Adding Index to Laravel Scout Conditionally (Algolia)
我知道我可以在模型保存上做到这一点,我希望能够在模型本身中嵌入functionilty以保持整洁。 – JaChNo