我正在使用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