Обеспечение доступности данных Relation в красноречивой коллекции при поиске по индексу Алголии - PullRequest
0 голосов
/ 20 марта 2019

У меня есть приложение Laravel 5.7 , использующее Scout Extended для интеграции Algolia функции поиска.В приложении у меня есть модель с именем "Prospect" , которая имеет отношение к отношениям с двумя другими моделями: "State" & "FoodCat" .

Я пытаюсь выяснить, как включить данные отношения для "State" & "FoodCat" в результаты поиска при поиске по индексу Алголии.

Данные отношения были включены в поисковый индекс путем расширения доSearchableArray () в модели Prospect.

[https://www.algolia.com/doc/framework-integration/laravel/indexing/configure-searchable-data/#relationships]

Однако данные взаимосвязи не доступны в коллекции Eloquent после поиска.Он доступен только при циклическом просмотре массива необработанных данных ...


Просмотр массива необработанных данных как "State" , так и "FoodCat" данные отношения доступны в поисковом индексе при выводе необработанных данных:

... out пример: Prospect :: search ('') -> raw ()

array:9 [▼
  "hits" => array:20 [▼
    0 => array:33 [▼
      "id" => 251
      "name" => "Pizza House & Grille"
      "contact_fname" => null
      "contact_lname" => null
      "contact_title" => null
      "food_cat_id" => 1
      "phone" => 6195610325
      "fax" => null
      "website" => ""
      "address" => "12580 Lakeshore Drive"
      "address2" => null
      "city" => "Lakeside"
      "state_id" => 5
      "zip" => 92040
      "region_id" => 1
      "latitude" => 38.975201
      "longitude" => -122.676003
      "sic_desc" => "Pizza Restaurants"
      "lead_source" => "Manual"
      "owner_type" => null
      "contacted" => 0
      "contacted_timestamp" => null
      "response_notes" => "Lorem Ipsum Something Something"
      "user_id" => null
      "created_at" => 1319545964
      "updated_at" => 1550950060
      "foodcat" => array:3 [▼
        "id" => 1
        "title" => "Pizza/Italian"
        "slug" => "Pizza-Italian"
      ]
      "state" => array:4 [▼
        "id" => 5
        "name" => "California"
        "abbr" => "CA"
        "active" => 1
      ]
      "_geoloc" => array:2 [▶]
      "food_cat_title" => "Pizza/Italian"
      "_tags" => array:1 [▶]
      "objectID" => "App\Prospect::251"
      "_highlightResult" => array:9 [▶]
    ]

Однако при поиске по индексу и извлечении результатов в красноречивую коллекцию данные "State" и "FoodCat" недоступны ...

... пример выводаиз: Prospect :: search ('') -> get ()

Collection {#650 ▼
  #items: array:20 [▼
    0 => Prospect {#713 ▼
      #guarded: []
      #connection: "mysql"
      #table: "prospects"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:26 [▶]
      #original: array:26 [▼
        "id" => 333
        "name" => "test"
        "contact_fname" => "test"
        "contact_lname" => "test"
        "contact_title" => "test"
        "food_cat_id" => 1
        "phone" => "6195551212"
        "fax" => ""
        "website" => ""
        "address" => "123 mian"
        "address2" => ""
        "city" => "sd"
        "state_id" => 5
        "zip" => 92101
        "region_id" => 1
        "latitude" => "32.785301"
        "longitude" => "-117.111000"
        "sic_desc" => "Pizza"
        "lead_source" => "Manual"
        "owner_type" => ""
        "contacted" => 0
        "contacted_timestamp" => null
        "response_notes" => ""
        "user_id" => null
        "created_at" => "2019-03-19 11:08:57"
        "updated_at" => "2019-03-19 11:08:57"
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #scoutMetadata: array:1 [▶]
    }

Как я могу сделать те же самые данные отношений доступными для красноречивой коллекции после поиска в Алголииindex?


Ссылка на эту ссылку [https://gist.github.com/Artistan/fea3e21f149fdf845e530299bcff37d4]

... вы можете получить доступ к данным отношения через paginator, стремясь загрузить отношения послепоиск вызова ...

$prospects = Prospect::search('pizza')->paginate(999999);
$prospects->load('state');
$prospects->load('foodcat');

Однако мне было интересно, если бы был способ сделать те же данные доступными без использования пакласс гинатора ...

1 Ответ

0 голосов
/ 20 марта 2019

Не совсем уверен, правильно ли я понял ваш вопрос, но, возможно, вам нужна функция with() в Eloquent.

Так что в приведенном вами примере вы бы назвали что-то вроде Prospect::with('state','foodcat')->get(), чтобыдля извлечения связанных моделей.

Стремление загружать отношения в Eloquent

...