微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 集合:使用两个克隆过滤

如何解决Laravel 集合:使用两个克隆过滤

那么让我们从问题开始吧。

我有一个具有以下结构的数据库

id first_user_id second_user_id
1 1 2
1 2 4
1 2 1

假设我有一个带有 id=1 的变量 $id = 1

我用这个找到了需要的记录。

Model::where('status',1)
->where('first_user_id',$id)
->orWhere('second_user_id',$id)->get();

我想获取某些列中不等于 $id 的所有 ID。

例如:

if first_user_id is equals to $id
    return second_user_id column
if second_user_id is equals to $id
    return first_user_id column

如果可能的话,我想用 Laravel Collections 做到这一点吗?

结果必须是包含上述条件中 id 的数组。

示例输出

Array
(
    [0] => 2 // second_user_id from first record
    [1] => 2 // first_user_id from the last record.
)

为了更清楚,这里有一些我真正想要的伪 PHP 代码

<?PHP

$students = [
  [
    "first_user_id" => 1,"second_user_id" => 2
  ],[
    "first_user_id" => 2,"second_user_id" => 3
  ],[
    "first_user_id" => 1,[
    "first_user_id" => 4,"second_user_id" => 6
  ],];


$var = 2; // Authenticated user
$arr = [];
foreach($students as $student) {
  if($student['first_user_id'] == $var || $student['second_user_id'] == $var) {
    if($student['first_user_id'] == $var) {
      $arr[] = $student['second_user_id'];
    } else $arr[] = $student['first_user_id'];
  }
}

print_r($arr);

输出

Array
(
    [0] => 1
    [1] => 3
)

谢谢。

解决方法

我猜你可以在这种情况下使用 union

$first = DB::table('users')
            ->where('second_user_id',$id)
            ->select('first_user_id as user_id');

$users = DB::table('users')
            ->where('first_user_id',$id)
            ->select('second_user_id as user_id')
            ->union($first)
            ->get(['user_id']);

在 SQL 中就像

select first_user_id as user_id from users where second_user_id = :id
union
select second_user_id as user_id from users where first_user_id = :id

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。