2017-06-08 84 views
0

我想確認數據庫中是否存在用戶集合。所以,說我有一個數組:如何檢查數據庫中是否存在多條記錄(laravel doctrine)

$data = [ 
    [ 
     'firstName' => 'Alastair', 
     'lastName' => 'Appleby' 
    ], 
    [ 
     'firstName' => 'Celine', 
     'lastName' => 'Wilkinson' 
    ] 
]; 

我想回到那兩個用戶,如果它們存在。我似乎無法找出有效地做到這一點的有效方法。我嘗試運行一個本地查詢,但沒有返回任何內容,我認爲這是因爲我已經綁定了參數。我的嘗試:

$where = []; 
    $params = []; 

    foreach($data as $n => $u) { 
     $where[] = '(first_name = ? AND last_name = ?)'; 
     $params[$n + $n + 1] = $u['firstName']; 
     $params[$n + $n + 2] = $u['lastName']; 
    } 

    $where = implode(' OR ', $where); 

    $query = "SELECT * FROM users WHERE $where"; 

    $q = $this->em->createNativeQuery($query, new ResultSetMapping()); 
    $q->setParameters($params); 

    return $q->getArrayResult(); 

回答

1

您需要使用查詢生成器表達式方法,就像這樣;

$qb = $this->em->createQueryBuilder(); 

$where = []; 
$params = []; 

$qb->select('u') 
    ->from(User::class, 'u'); 

foreach($data as $n => $u) { 
    $where[] = $qb->expr()->andX(
     $qb->expr()->eq('u.firstName', ":firstName$n"), 
     $qb->expr()->eq('u.lastName', ":lastName$n") 
    ); 

    $params["firstName$n"] = $u['firstName']; 
    $params["lastName$n"] = $u['lastName']; 
    } 

$qb->where($qb->expr()->orX(
    $where 
))->setParameters($params); 

return $qb->getQuery()->getArrayResult(); 
相關問題