Получает последние данные из внешнего ключа в отношении - PullRequest
0 голосов
/ 20 января 2020

Я хочу спросить, могу ли я получить последние данные внешнего ключа в отношении?.

В этом случае я хочу получить последние данные транзакции пользователя.

, например, в таблица транзакций между 3 месяцами go и теперь есть некоторые данные транзакций следующим образом.

{
    "current_page": 1,
    "data": [
        {
            "id": 8,
            "user_id": 1,
            "type": "sell",
            "created_at": "2019-12-11 11:55:31",
            "updated_at": "2019-12-11 11:55:31",
            "tax": null,
            "invoice_number": null,
            "name": "Fredy"
        },
        {
            "id": 7,
            "user_id": 1,
            "type": "buy",
            "created_at": "2019-11-20 17:14:55",
            "updated_at": "2019-11-20 17:14:55",
            "tax": null,
            "tax_percent": "0.90",
            "invoice_number": null,
            "name": "Fredy"
        },
        {
            "id": 6,
            "user_id": 8,
            "type": "buy",
            "created_at": "2019-11-20 16:28:33",
            "updated_at": "2019-11-20 16:28:33",
            "tax": null,
            "name": "Tommy"
        },
        {
            "id": 5,
            "user_id": 2,
            "type": "buy",
            "created_at": "2019-11-20 15:47:57",
            "updated_at": "2019-11-20 15:47:57",
            "tax": null,
            "name": "Sarah"
        },
        {
            "id": 4,
            "user_id": 3,
            "type": "buy",
            "created_at": "2019-11-20 15:47:31",
            "updated_at": "2019-11-20 15:47:31",
            "tax": null,
            "name": "John Doe"
        },
    ],
}

Это пример кода, который я сделал

public function index()
{
   $start = Carbon::now()->subMonths(3)->format('Y-m-d') . ' 00:00:00';
   $end = Carbon::now()->format('Y-m-d') . ' 23:59:59';

   return $query = DB::table('transaction')
                     ->join('users', 'users.id', '=', 'gold_transaction.user_id')
                     ->select('transaction.id', 'user_id', 'users.*')
                     ->whereBetween('transaction.created_at', [$start, $end])
                     ->whereIn('transaction.id', [DB::raw("SELECT MAX(transaction.id) FROM transaction GROUP BY user_id")])->get();
}

Что мне делать, если Я хочу отображать только пользователей, которые не совершали транзакции более 7 дней с момента последней транзакции для всех пользователей?

Спасибо.

1 Ответ

0 голосов
/ 20 января 2020

Затем вы можете сделать это, как показано ниже,

Получить транзакцию пользователя

$transaction = User::with(['transactions' => function ($q) use($start, $end){
   $q->whereBetween('transactions.created_at', [$start, $end]);
])->find($user_id);

Получить всех пользователей со своими транзакциями

$transaction = User::with(['transactions' => function ($q) use($start, $end){
     $q->whereBetween('transactions.created_at', [$start, $end]);
])->get();

при условии, что в вашей модели пользователя есть отношение транзакций, как показано ниже

public function transactions() {
     return $this->hasMany('App\Transaction', 'user_id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...