Laravel 查询构建器获取用户登录记录

问题描述

我有一个 Laravel API 并且有一个函数可以在用户登录时运行,当他们登录时,我想找到链接到他们帐户的关联域,并根据域的通知是否发出来获取域到期或 SSL 到期。

我的代码正在运行,但我注意到,无论用户 ID 是什么,它都会查找所有域,而我只想获取登录用户的域...

在这里做错了什么?

/**
 * Log In (log a user into the application)
 *
 * @param  Request  $request
 * @return Response
 */
public function login(Request $request)
{

    // update the last login at time
    try {

      $user = User::findOrFail(Auth::id());
      $user->last_login_at = Carbon::Now()->toDateTimeString();
      $this->resetExpiryAlerts($user,Auth::id());
      $user->save();

    } catch (\Exception $e) { }

    // success
    return $this->respondWithToken($token);
}

/**
 * Reset expiry alerts
 *
 */
public function resetExpiryAlerts($user,$id)
{

  $domains = Domains::where('user_id',$id)
                    ->where('domain_last_notified_at','!=',null)
                    ->orWhere('ssl_last_notified_at',null)
                    ->get();

  if (count($domains) > 0) {
    foreach ($domains as $key => $domain) {

      if (
        isset($domain->domain_last_notified_at) &&
        ($user->last_login_at >= $domain->domain_last_notified_at)
      ) {
        $domain->domain_last_notified_at = null;
      }

      if (
        isset($domain->ssl_last_notified_at) &&
        ($user->last_login_at >= $domain->ssl_last_notified_at)
      ) {
        $domain->ssl_last_notified_at = null;
      }

      $domain->save();
    }
  }

}

我从示例中删除了一些不相关的代码,但我认为我的查询有问题...

$domains = Domains::where('user_id',$id)
                  ->where('domain_last_notified_at',null)
                  ->orWhere('ssl_last_notified_at',null)
                  ->get();

因为无论用户 ID 如何,它似乎都会返回任何域。

解决方法

我认为问题出在您的查询中。最后两个 wheres 应该分组。请尝试以下操作:

Domains::where('user_id',$id)
       ->where(function ($query) {
           $query->whereNotNull('domain_last_notified_at')
                 ->orWhereNotNull('ssl_last_notified_at');
       })
       ->get();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...