Home > Mobile >  How to search from relationship data ? In laravel
How to search from relationship data ? In laravel

Time:01-04

public function scopeSearch($query, $value)
{
    $searchValues = explode(' ', $value);
    if (!$value) return $query;
    return $query->where(function ($q) use ($searchValues) {
        foreach ($searchValues as $token) {
            $q->orWhere('name', 'like', "%{$token}%");
            $q->orWhere('street', 'like', "%{$token}%");
        }
    });
}

I want to search the data. This model also has

public function brands()
{
    return $this->belongsToMany(Brand::class, 'dealer_brands');
}
public function province()
{
    return $this->belongsTo(Province::class);
}

How can I get data from the relastionship. Like Dealer(model) has data Nmae = josh , brand_id = 1 {brand.name = samsung} , province_id = 2 (province.name = "aligora"). When I search Josh Samsung Alogora, I want to ge the data. When I only search aligora, I want to get the data of model having province aligora. hOW CAN I MODIFY CODE?

CodePudding user response:

looking at your model relationships. This may work for you

    public function scopeSearch($query, $value)
    {
        if (!$value) return $query;
        $searchValues = explode(' ', $value);
        return $query->where(function ($q) use ($searchValues) {
            foreach ($searchValues as $token) {
                $q->where('name', 'like', "%{$token}%")
                    ->orWhere('street', 'like', "%{$token}%")
                    ->orWhereHas('brands', function ($sub_q) use ($searchValues) {
                        $sub_q->where('name', 'like', "%{$token}%")
                            ->orWhere('street', 'like', "%{$token}%");
                    })
                    ->orWhereHas('province', function ($sub_q) use ($searchValues) {
                        $sub_q->where('name', 'like', "%{$token}%")
                            ->orWhere('street', 'like', "%{$token}%");
                    });
            }
        });
    }

I have no idea about column names in related tables so repeating name and street. you can change as per requirement

  •  Tags:  
  • Related