Wraith
Wraith

Reputation: 501

How create search system with relations?

I will try explain the best i can. I have table with advretisements like a cars for example. I have relation tables like: make, model. Which means in adv table can entry

id|make_id|model_id 1 | 23 | 33

make_id is Hyundai and model id is Excel I have search box when you type search keyword

if i type Hyundai

// create search model
$adv = Advertisement::query();

// status activate 64
$adv->where('user_id', Auth()->user()->id);

// make
$adv->whereHas('make', function($query) use($request) {
    $query->where('name', 'like', '%' . $request->search_adv . '%');
});

dd($adv->get());

Works perfect for make. but when i make

// create search model $adv = Advertisement::query();

// status activate 64
$adv->Where('user_id', Auth()->user()->id);

// make
$adv->whereHas('make', function($query) use($request) {
    $query->orWhere('name', 'like', '%' . $request->search_adv . '%');
});

// model
$adv->whereHas('model', function($query) use($request) {
    $query->orWhere('name', 'like', '%' . $request->search_adv . '%');
});

dd($adv->get());

How should be done ?

Upvotes: 0

Views: 31

Answers (1)

// status activate 64
$adv->Where('user_id', Auth()->user()->id);

// make
$adv->whereHas('make', function($query) use($request) {
    $query->where('name', 'like', '%' . $request->search_adv . '%');
});

// model
$adv->orWhereHas('model', function($query) use($request) {
    $query->where('name', 'like', '%' . $request->search_adv . '%');
});

dd($adv->get());

Upvotes: 2

Related Questions