2017-10-24 8 views
1

「複数のオフィスを持つ大企業の電話帳を作成したい」としましょう。 私のデータベースは3つのテーブルで構成されています - ユーザー - シティ(表す事務所の所在地) - 役割(ユーザーが複数の役割を持つことができます)複数のフィールドを持つAlgolia search(Scout)

私は実行するために3種類のフィールドを持つフォームを作成したいのですがクエリ、どのように私はそれを行うことができますか?

今の私は1つだけのフィールドを持っているし、これが私のメインモデルのユーザーである

`` `

public function city() 
{ 
    return $this->belongsTo(City::class); 
} 

public function roles() 
{ 
    return $this->belongsToMany(Role::class); 
} 

public function toSearchableArray() 
{ 
    $office = $this->city; 

    $array = [ 
     'name' => $this->name, 
     'phone' => $this->phone, 
     'postal_code' => $office->postal_code, 
     'city' => $office->name, 
    ]; 

    return $array; 
} 

` ``

あなたはAlgoliaとの研究をどのようにするだろうし、クエリにフィルタを追加する(都市と役割)?

ロールはどのように保存する必要がありますか?プレーンテキスト?

答えて

6

スカウトのみwhere句で数字をサポートしていただきありがとうございます:https://laravel.com/docs/5.5/scout#where-clauses

私もオフィス用IDを格納するための推薦などを検索できます:

役割に対する
User::search('')->where('office_id', 2)->get(); 

、ので、複数の値がある場合は、配列として格納する必要があります。 whereを配列に使用することはできません。したがって、コールバックパラメータを利用して、オプション配列にfilterエントリを追加する必要があります。

User::search('', function ($algolia, $query, $options) { 
    $options = array_merge($options, [ 
     'filters' => 'roles:engineer' 
    ]); 

    return $algolia->search($query, $options); 
})->get(); 

現在のフィルタリングについてAlgoliaのドキュメントを見つけることができます。https://www.algolia.com/doc/guides/searching/filtering/

をそれがあなたのために働いていた場合は私に知らせてください。

関連する問題