TransWikia.com

Laravel как связать 2 таблицы для получения данных первой по id другой таблицы

Stack Overflow на русском Asked by Andrey on December 1, 2020

Всем привет. Допустим есть 2 таблицы – clients и payments.
У клиента может быть много платежей, потому тут в моделях у нас связь hasMany.
А как сделать так, чтобы по id клиента указанного в url (допустим url такой /get/client/{client}/payments, тут id клиента помещается в {client}) можно было получить все платежи конкретного клиента (ясно дело id характеризует конкретного клиента).
Прошу пожалуйста подсказать кто знает как это реализовать.

One Answer

В целом вы же получаете клиента можете работать с платежами напрямую из метода например

public function payments(AppModelsClient $client) 
{
    return response()->json(['success' => true, 'payload' => ['payments' => $client->payments]]);
}

Но это если у вас подобная связь

clients:

  • id
  • other

payments

  • id
  • client_id
  • other

и соответственно в моделях

// AppModelsClient
public function payments(): HasMany
{
    return $this->hasMany(Payments::class);
}

// AppModelsPayment
public function client(): BelongsTo
{
    return $this->belongsTo(Client::class);
}

То собственно у вас уже есть все связи между платежами и клиентами то есть вы можете вытаскивать как платежи выбранного клиента так и клиента у конкретного платежа... Но ещё вы можете сделать скопу

// AppModelsPayment
public function scopeByClientId(IlluminateDatabaseEloquentBuilder $builder, int $client_id): IlluminateDatabaseEloquentBuilder
{
    return $builder->where('client_id', $client_id);
}

И теперь что бы получить платежи по id клиента достаточно попросить их Payment::byClientId($client_id)->get()

Correct answer by Walfter on December 1, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP