Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

david2000's avatar

request controller on 2 tables

I have a table students with the fields (id, name) and a table named payments with 6 fields (id, date_payment, number_seance, price, total, fk_student)

So, in my Controller Payment I have this (for now)

public function index(Request $request)
{
    $user = $request->user();
    $payments = Payment::query()
        ->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
            $query->where('email', $user->email);
        })
        ->when($request->has('search'), function (Builder $query) use ($request) {
            $query->where('name', 'like', '%' . $request->input('search') . '%');
        })
        ->paginate(5);

    return view('admin.payments.index', compact('payments'))
        ->with('display_search', $user->hasRole('admin'));
}

In fact, I have to replace where by whereHas

$query->where('name', 'like', '%' . $request->input('search') . '%');

I don't know how do I have to include the whereHas

Thank you for your help

0 likes
4 replies
bobbybouwmann's avatar

whereHas only works for relationships, not with a single column. So if you want to do the whereHas on the user relationship you have to do this

$paymetns = Payment::whereHas('user', function ($query) use $request) {
    $query->where('name', 'like', '%' . $request->input('search') . '%');
})->get();
david2000's avatar

Thank you, but I have to use a wherahas or not ? I don't understand... In fact, I want that when I encode a payment, the student consults his payment after login.

In my model Payment

public function eleves(){

    return $this->belongsTo('App\Student', 'fk_student');
    }

In my model Student I have this

public function payments(){

        return $this->hasMany('App\Payment', 'fk_student');
    }

My relationship are correct ?

Thank you

Please or to participate in this conversation.