如何解决Laravel 集合:使用两个克隆过滤
那么让我们从问题开始吧。
id | first_user_id | second_user_id |
---|---|---|
1 | 1 | 2 |
1 | 2 | 4 |
1 | 2 | 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
$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 举报,一经查实,本站将立刻删除。