В опубликованном вами коде используется Query Builder (DB::table('app_payments')->...
), а не Eloquent (AppPayment::where(...)->...->get()
)
Какова ваша цель эти таблицы? Продолжая делать это с помощью Query Builder напрямую или с Eloquent, расширяя Query Builder?
В Eloquent вы должны установить отношения между приложением и платежами в Модели:
public function app()
{
$this->belongsTo(App::class, 'appId');
}
public function user()
{
$this->belongsTo(User::class);
}
Что-то вроде
AppPayment::where('appId', $id)->with(['app', 'user'])->get()
вернет все Платежи с соответствующим Приложением и Пользователем.
Конечно, если вы ожидаете получить только один платеж на пользователя, это еще не произойдет. сделать работу. Для меня это звучит так, будто вам лучше запросить наоборот, но это решение зависит от того, какие данные вам действительно нужны.
Для последнего платежа это будет примерно так:
// App\Models\User.php
...
public function payments()
return $this->hasMany(AppPayment::class)
->with(['app'])
->orderByDesc('created_at');
...
// query anywhere
$users = User::with(['payments', 'payment.app'])
->whereHas('payments', function (Builder $query) use($app_id){
$query->where('app_id', $app_id);
})
->get()
// latest payment:
foreach($users as $user){
$latestPayment = $user->payments[0];
...
}
Код не проверен ... И все еще нужен трюк, чтобы получить только (!) Последний платеж специального c приложения, я потерял эту точку из виду ...