Laravel - Получить записи между двумя датами из второй таблицы - PullRequest
0 голосов
/ 29 мая 2020

У меня что-то вроде этого:

Таблица 1: Имя обучения, created_at, user_id (Plan_Treninga)

Таблица 2: user_id, created_at, expire_at (InvoiceUser)

Я хочу извлечь все из таблицы 1, где created_at находится между таблицей 2 created_at и expire_at.

Это то, что я пытаюсь сделать ..

$plan = Plan_Treninga::whereBetween(function($q) use ($id){
          $inv = InvoiceUser::where([
            ["user_id",$id],
            ["status","paid"],
          ])->latest("id")->first();
        })

Я еще не закончил , но мой мозг перестал работать, поэтому я должен спросить здесь.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Если я понимаю, что вы хотите, то ясно. вы хотите запросить все из таблицы 1, которые созданы, существуют между созданной таблицей 2 и expire_at, верно? если это так, вы можете использовать запрос where exists для достижения этого.

// assume your table name is plan_treningas & invoice_users
Plan_Treninga::whereExists(function ($query) {
    $query->select(DB::raw(1))
          ->from('invoice_users')
          ->whereRaw('plan_treningas.created_at BETWEEN invoice_users.created_at AND invoice_users.expire_at'); // add more query depend your logic
})->get();

для получения дополнительной информации вы можете взглянуть на docs

или если вы хотите использовать необработанный запрос

SELECT
*
FROM plan_treningas
WHERE EXISTS (
    SELECT 1 FROM invoice_users WHERE plan_treningas.created_at BETWEEN invoice_users.created_at AND invoice_users.expire_at
)

1 голос
/ 29 мая 2020

Взгляните на объединения https://laravel.com/docs/7.x/queries#joins

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

С объединениями вы можете делать множество вещей.

$results = DB::table('table1')
            ->join('table2', function ($join) {
                $join->on('table1.user_id', '=', 'table2.user_id')
                    ->where('table2.status', '=', 'paid')
                    ->where('table2.created_at', '>', 'table1.created_at');
            })
            ->get();

Также посмотрите на отношения. Есть несколько хороших ответов для установления отношений "многие ко многим".

https://laravel.com/docs/7.x/eloquent-relationships#many -to-many

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