ich Probleme reproduzieren diese Art von einer MySQL-AbfrageKonvertieren MySQL Suche nach einem Paar von Werten in einer Tabelle Eloquent Abfrage
SELECT *
FROM foo
WHERE (column1, column2) IN (('foo', 1), ('bar', 2))
Es ist ein Verfahren, bei Eloquent Query Builder mit Eloquent whereIn()
, aber es genannt habe nur eine Spalte als Parameter empfangen kann:
/**
* Add a "where in" clause to the query.
*
* @param string $column
* @param mixed $values
* @param string $boolean
* @param bool $not
* @return $this
*/
public function whereIn($column, $values, $boolean = 'and', $not = false)
{
...
}
so können Sie so etwas wie dieses
$qb = $this->model->whereIn(['column1', 'column2'], array([1, 2], [1,3], [3, 32]));
nicht tun
Zur Zeit arbeite ich sehr hart versucht Lösung zu finden, aber wenn jemand helfen kann, wäre ich sehr dankbar :)
EDIT: Ich schaffte es auf diese Weise zu tun:
/**
* ...
*/
public function findConnectionsByUser(User $user, array $userConnectionIds)
{
$qb = $this->model->query();
...
return $this->createQueryBuilderForUserConnectionsWithUserIds($qb, $user, $userConnectionIds)->get();
}
/**
* @param Builder $qb
* @param User $user
* @param array $userConnectionIds
*
* @return Builder
*/
private function createQueryBuilderForUserConnectionsWithUserIds(Builder $qb, User $user, array $userConnectionIds)
{
foreach ($userConnectionIds as $userConnectionId) {
$qb->orWhere(array(
array('receiver_id', $user->id),
array('initiator_id', $userConnectionId)
))
->orWhere([
['receiver_id', $userConnectionId],
['initiator_id', $user->id]
]);
}
return $qb;
}
EDIT 2 (mehr skalierbare Lösung):
$qb = $this->model->query();
$oneSide = $this->model->newQuery()->where('receiver_id', '=', $user->id)
->whereIn('initiator_id', $userConnectionsIds);
return $qb->where('initiator_id', '=', $user->id)
->whereIn('receiver_id', $userConnectionsIds)
->union($oneSide)->get();
Ich habe es geschafft, mein Problem zu lösen, bevor ich deine Antwort sah. Aber für kleine Test, habe ich Ihren Code für meine Zwecke angepasst, und es scheint zu funktionieren, Tnx! –