gpt4 book ai didi

mysql - 将 MySQL 搜索表中的一对值转换为 Eloquent 查询

转载 作者:行者123 更新时间:2023-11-29 02:14:17 25 4
gpt4 key购买 nike

我在使用 Eloquent 重现这种 MySQL 查询时遇到了问题

SELECT  *
FROM foo
WHERE (column1, column2) IN (('foo', 1), ('bar', 2))

Eloquent 查询生成器中有一个方法叫做 whereIn(),但它只能接收一列作为参数:

/**
* 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)
{
...
}

所以,你不能做这样的事情

$qb = $this->model->whereIn(['column1', 'column2'], array([1, 2], [1,3], [3, 32]));

我目前正在努力寻找解决方案,但如果有人能提供帮助,我将不胜感激:)

编辑:我设法这样做了:

/**
* ...
*/
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;
}

编辑 2(更具可扩展性的解决方案):

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

最佳答案

你可以尝试嵌套它们

$qb = $this->model->whereIn('column1', [1, 2, 3])
->orWhere(function ($query) {
$query->whereIn('column2', [2, 3, 32]);
});

也不确定您是否可以像这样简单地使用 whereIn 。先试试看

$qb = $this->model->whereIn('column1', [1, 2, 3])
->whereIn('column2', [2, 3, 32]);

第一个查询读起来更像 OR,第二个更像 AND 查询。

关于mysql - 将 MySQL 搜索表中的一对值转换为 Eloquent 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com