У меня всегда один и тот же ученик, который появляется после каждой записи - PullRequest
0 голосов
/ 28 сентября 2019

Когда я добавляю запись, у меня всегда появляется один и тот же ученик, который появляется ???

Изменить мою проблему решено

enter image description here

Я думаю, что проблема, возможно, в моем индексе функций ()?

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') . '%');
         })->with('students:id,name') 
    ->paginate(5);

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

Для информации у моих учеников в таблице есть 3 поля (id, name, email), а в таблице выплат 6поля (id, date_payment, number_seance, price, total, fk_student).

Мои отношения:

Модель Студент :

protected  $fillable = ['user_id', 'name', 'email', 'payment_id'];

public function payments(){

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

  public function user()
    {
        return $this->belongsTo('App\User', 'id', 'payment_id');
    }

Модель Оплата :

protected  $fillable = ['date_payment', 'fk_student', 'number_seance',  'price', 'total'];

    public function students(){

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

    public function user()
    {
        return $this->belongsTo('App\User', 'id', 'payment_id');
    }

Модель Пользователь

public function students()
    {
        return $this->hasOne('App\Student', 'user_id', 'id');
    }

    public function payments()
    {
        return $this->hasOne('App\Student', 'payment_id', 'id');
    }

Указательный отвал

<th>Date payment</th>
<th>Number seance</th>
<th>Price</th>
<th>Total</th>
 <th>Name</th>

</tr>
</thead>
@foreach($payments as $payment)
<tr>
   <td> {{$payment->date_payment->format('d/m/Y') }}</td>
   <td> {{$payment->number_seance}}</td>
   <td> {{$payment->price}}</td>
   <td> {{$payment->total}}</td>
   <td> {{$payment->students->first()->name}}</td> 
   <td>

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 28 сентября 2019

Похоже, что оба эти запроса пытаются выполнить запросы к полям, которых нет в модели, к которой вы обращаетесь.

Если у пользователя нет прав администратора, я думаю, что вы пытаетесьпросто отправить платежи, которые сделал этот конкретный пользователь.Но я не вижу, где вы связываете связанные таблицы для запроса к пользователю.Эта часть:

 $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 .Надеюсь, вы увидите, куда я пытался обратиться с соответствующими запросами, и выясните, как настроить ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...