laravel/scout

Scout with Meilisearch, is sending all model data instead of just the specific data defined in the toSearchableArray() method.

Closed this issue · 2 comments

Scout Version

10.8.6

Scout Driver

Meilisearch

Laravel Version

10.0

PHP Version

8.2

Database Driver & Version

MySQL 8

SDK Version

No response

Meilisearch CLI Version

No response

Description

Scout, combined with Meilisearch, is sending all model data instead of just the specific data I've defined in the toSearchableArray() method.

Steps To Reproduce

artisan scout:import "App\ContactModel"

Hey @devravik. I can't believe that's correct.. It's literally implemented in the update method:

https://github.com/laravel/scout/blob/10.x/src/Engines/MeilisearchEngine.php#L63

Are you sure that this is happening? How did you reach this conclusion?

Hey @driesvints,

Here following are further details

Ran php artisan scout:import "App\DeviceModel"

dd for toSearchableArray() returns following

array:18 [ "id" => 1 "name" => "1 5033T Black OC " "brand_name" => "Alcatel" "type" => null "img_url" => "/img/default.png" "service_fee" => null "boost_value" => 0 "listed" => 1 "brand" => array:5 [ "id" => 40 "name" => "Alcatel" "img_url" => "brands/T4wT4E2WBzfe8ZY4djf5S4s4DwWP4iVmTOfQ1znd.jpeg" "service_fee" => null "listed" => true ] "services_count" => 6 "can_trade_in" => 1 "can_upgrade" => 0 "can_repair" => 1 "moorup_sku" => "" "price_functional_not_broken_screen" => 10000 "price_functional_broken_screen" => 8000 "price_non_functional_not_broken_screen" => 5000 "price_non_functional_broken_screen" => 3000 ] // app/DeviceModel.php:52

Object I got from Meilisearch which isn't matches with above we are sending

{
   "id": 1,
   "brand_id": 40,
   "img_url": "/img/default.png",
   "service_fee": null,
   "type": null,
   "is_listed": 1,
   "name": "1 5033T Black OC ",
   "can_trade_in": 1,
   "can_repair": 1,
   "can_upgrade": 0,
   "boost_value": 0,
   "moorup_sku": "",
   "sales_model_code": null,
   "price_functional_not_broken_screen": 10000,
   "price_non_functional_not_broken_screen": 5000,
   "price_functional_broken_screen": 8000,
   "price_non_functional_broken_screen": 3000,
   "created_at": "2020-05-20T14:12:39.000000Z",
   "updated_at": "2023-07-07T15:48:04.000000Z",
   "device_name": "Alcatel 1 5033T Black OC ",
   "brand_name": "Alcatel",
   "listed": true,
   "services_count": 6,
   "brand": {
     "id": 40,
     "name": "Alcatel",
     "img_url": "brands/T4wT4E2WBzfe8ZY4djf5S4s4DwWP4iVmTOfQ1znd.jpeg",
     "service_fee": null,
     "created_at": "2019-08-17T18:04:26.000000Z",
     "updated_at": "2020-08-27T04:17:50.000000Z",
     "listed": true
   }
 },

Which matches with $fillable and also included brand relation as loaded for object and appended attributes.

protected $fillable = [ 'name', 'brand_id', 'type', 'img_url', 'service_fee', 'is_listed', 'price_non_functional_broken_screen', 'price_functional_broken_screen', 'price_non_functional_not_broken_screen', 'price_functional_not_broken_screen', 'moorup_sku', 'can_upgrade', 'can_trade_in', 'sales_model_code', 'can_repair', ];