Похоже, что оба эти запроса пытаются выполнить запросы к полям, которых нет в модели, к которой вы обращаетесь.
Если у пользователя нет прав администратора, я думаю, что вы пытаетесьпросто отправить платежи, которые сделал этот конкретный пользователь.Но я не вижу, где вы связываете связанные таблицы для запроса к пользователю.Эта часть:
$payments = Payment::query()
->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
$query->where('email', $user->email);
})
, кажется, ищет поле email
на вашей модели Payment .Но вы сказали, что не было ни одного.Вы также сказали, что у вашего ученика не было электронной почты, поэтому я не уверен, как вы можете связать платеж с адресом электронной почты.Если у вас были отношения между пользователем и платежом, вы могли бы сделать что-то вроде этого:
$payments = Payment::whereHas('user', function($query) use($user){
$query->where('users.email', $user->email);
// etc.
и получить платежи, связанные с этим пользователем.Но в настоящее время нет FK, чтобы сделать это.
Также появляется вторая часть этого запроса:
$query->where('name', 'like', '%' . $request->input('search') . '%');
})->with('students:id,name')
пытается выполнить запрос к имени Payment , и я не думаю, что это сработает, поскольку в модели Payment отсутствует поле имени.Если вы пытались получить платежи за учащегося в процессе поиска, может сработать что-то похожее на это:
$payments = Payment::whereHas('student', function($query) use($request){
$query->where('name', 'like', '%' . $request->input('search') . '%');
// etc.
Обратите внимание, что отношение модели ученика к оплате должно быть единичным (студент, а не студент), чтобы избежать путаницы.
Этот код не решит эту проблему - есть ряд вещей, которые требуют внимания (я думаю).Но большая проблема, которую я вижу, заключается в том, что вам нужно подтолкнуть запрос к полям отношений, а не к модели Payment .Надеюсь, вы увидите, куда я пытался обратиться с соответствующими запросами, и выясните, как настроить ваш код.