首页 文章

Laravel雄辩地从电子邮件和电话号码阵列中选择所有用户

提问于
浏览
0

我正在尝试使用一组电子邮件地址和一组电话号码构建一个Eloquent查询,这些电话号码返回所有匹配其中一个电话号码或其中一个电子邮件地址的用户 . 以下是我尝试过的方法:

将函数传递给 where

public function findFromContacts($emailAddresses = array(), $phoneNumbers = array()) {
    return AppUser::where(function($query) use($emailAddresses, $phoneNumbers) {
        foreach($emailAddresses as $emailAddress) {
            $query->orWhere('email', $emailAddress);
        }
        foreach($phoneNumbers as $phoneNumber) {
            $query->orWhere('phone', $phoneNumber);
        }
    })->get();
}

使用 array_reduce 追加 whereOr 子句:

public function findFromContacts($emailAddresses = array(), $phoneNumbers = array()) {
    $query = AppUser::query();
    $queryWithEmailAddresses = array_reduce($emailAddresses, function ($query, $emailAddress) {
        return $query->orWhere('email', $emailAddress);
    }, $query);
    $queryWithPhoneNumbers = array_reduce($phoneNumbers, function ($query, $phoneNumber) {
        return $query->orWhere('phone', $phoneNumber);
    }, $queryWithEmailAddresses);
    return $queryWithPhoneNumbers->get();
}

这两个都返回表中的每个条目 .

目前,我发现唯一可行的方法是为每个电子邮件和每个不理想的电话号码查询数据库一次 .

2 回答

  • 1

    我会尝试使用“whereIn”它只会找到你想要的东西,应该做的伎俩 .

    public function findFromContacts($emailAddresses = array(), $phoneNumbers = array()) {
        return AppUser::whereIn('email', $emailAddresses)
            ->orWhereIn('phone', $phoneNumbers)
            ->get();
    }
    
  • 1

    尝试这个,因为你需要一个或两个 .

    $query->where(function($query1){
                      $query1->orWhereIn('email',$emailAddresses)
                      ->orWhereIn('phone',$phoneNumber);
    })
    

相关问题