Laravel как связать 2 таблицы для получения данных первой по id другой таблицы
Всем привет. Допустим есть 2 таблицы - clients и payments. У клиента может быть много платежей, потому тут в моделях у нас связь hasMany. А как сделать так, чтобы по id клиента указанного в url (допустим url такой /get/client/{client}/payments, тут id клиента помещается в {client}) можно было получить все платежи конкретного клиента (ясно дело id характеризует конкретного клиента). Прошу пожалуйста подсказать кто знает как это реализовать.
Ответы (1 шт):
В целом вы же получаете клиента можете работать с платежами напрямую из метода например
public function payments(App\Models\Client $client)
{
return response()->json(['success' => true, 'payload' => ['payments' => $client->payments]]);
}
Но это если у вас подобная связь
clients:
- id
- other
payments
- id
- client_id
- other
и соответственно в моделях
// App\Models\Client
public function payments(): HasMany
{
return $this->hasMany(Payments::class);
}
// App\Models\Payment
public function client(): BelongsTo
{
return $this->belongsTo(Client::class);
}
То собственно у вас уже есть все связи между платежами и клиентами то есть вы можете вытаскивать как платежи выбранного клиента так и клиента у конкретного платежа... Но ещё вы можете сделать скопу
// App\Models\Payment
public function scopeByClientId(Illuminate\Database\Eloquent\Builder $builder, int $client_id): Illuminate\Database\Eloquent\Builder
{
return $builder->where('client_id', $client_id);
}
И теперь что бы получить платежи по id клиента достаточно попросить их Payment::byClientId($client_id)->get()