0

I am working on a Laravel project. I am using Scout based on Algolia. But I struggling to apply whereIn on the relationships. I have 2 models as follow.

Place.php

class Place extends Model
{
    use Searchable, Localizable;

    protected $with = [
        'images',
        'phones',
        'emails',
        'categories'
    ];

    protected $casts = [
        'is_featured' => 'boolean'
    ];

    public function categories()
    {
        return $this->belongsToMany(Category::class, 'place_category');
    }

    public function searchableAs()
    {
        return "places_index";
    }

    public function toSearchableArray()
    {
        $record = $this->toArray();
        $record['_geoloc'] = [
            'lat' => $record['latitude'],
            'lng' => $record['longitude'],
        ];
        $record['categories'] = $this->categories->map(function ($data) {
            return [
                'id' => $data['id'],
                'en_name' => $data['en_name'],
                'mm_name' => $data['mm_name'],
            ];
        })->toArray();
        unset($record['created_at'], $record['updated_at'], $record['latitude'], $record['longitude']);
        unset($record['images'], $record['phones'], $record['emails']);

        return $record;
    }
}

Category.php

class Category extends Model
{
    use Searchable;

    protected $touches = [
        'places',
    ];

    public function places()
    {
        return $this->belongsToMany(Place::class, 'place_category');
    }
}

Now, I am searching the Place models/ data filtering by category. As you can see, I have also indexed the categories with places in toSearchableArray method.

I am trying to achieve something like this.

Place::search($keyword)->whereIn('categories', ????);//how can I filter by the Ids here

How can I do that?

Wai Yan Hein
  • 13,651
  • 35
  • 180
  • 372

0 Answers0