Laravel добавить функцию, чтобы присоединиться - PullRequest
0 голосов
/ 29 июня 2018

У меня есть 2 таблицы, таблица продуктов и таблица пользователей.

В моей таблице пользователей есть столбец last_login, который возвращает дату и время.

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

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

Что-то вроде ...

$products = Product::where("price", "<=", $maxBudget)   
        ->where('active', 1)
        ...

        ->join('users', function ($join) {
            $join->on('products.created_by', '=', 'users.id')
                 ->where('last_login', '>', 2592000);
        })
        ->get()

за исключением того, что это не сработает, потому что last_login - это дата и время, поэтому мне нужно добавить туда такую ​​функцию, как:

if ($user->last_login->diffInSeconds(Carbon::now() > 2592000) {
    do the thing
}       

Как я мог это сделать?

1 Ответ

0 голосов
/ 29 июня 2018

Если вы пытаетесь присоединиться к столам, вы можете сделать что-то вроде:

// min seconds
$threshold = 123456;

Product::query()
     ->join('users', 'products.created_by', '=', 'users.id')
     ->where('products.active', 1)
     ->where('users.last_login', '<=', now()->subSeconds($threshold)->toDateTimeString())
     ->select(['products.*', 'users.last_login'])
     ->get();

В противном случае, если оно основано на последнем логине вошедшего в систему пользователя:

// Get the user's last login attribute.
$lastLogin = auth()->user()->last_login;

// whatever the minimum time since their last login should be.
$threshold = 12345; 

$exceeded = now()->diffInSeconds(Carbon::parse($lastLogin))->gte($threshold);

if ($exceeded) {
    Product::where(...)->get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...