Laravel添加功能加入

时间:2018-06-28 23:48:33

标签: php laravel

我有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 :(得分:1)

如果您要加入表格,那么您应该可以执行以下操作:

// 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();

否则,如果它基于登录用户的last_login:

// 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();
}