Laravel雄辩的联盟关系模型

no0by5

我有一个可以从不同关系中开会的用户,可以将他直接分配给一个有太多关系的会议,他可以有一个具有太多关系的用户组,可以有很多关系的会议,并且他可以以一对多的关系负责会议。
我想让一个用户参加所有会议。我不想合并集合,因为我希望能够where直接在数据库中使用功能我的尝试是合并所有会议ID,然后通过“ whereIn”获取会议。

$ids = $this->meetings()->select('meetings.id')
    ->union($this->meetingsFromGroups()->select('meetings.id'))
    ->union($this->responsibleMeetings()->select('meetings.id'));

return Meeting::whereIn('id', $ids)->get();

执行此操作时,出现以下错误:

“ SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以找到在'union'附近使用正确的语法(请选择“ meetings`.id”从“会议”内部联接“会议用户组”上的第1行(SQL:...)“执行的SQL:

select *
from `meetings`
where `id` in (
        (
            select `meetings`.`id`
            from `meetings`
                inner join `meeting_user` on `meetings`.`id` = `meeting_user`.`meeting_id`
            where `meeting_user`.`user_id` = 1
        )
        union
        (
            select `meetings`.`id`
            from `meetings`
                inner join `meeting_user_group` on `meeting_user_group`.`meeting_id` = `meetings`.`id`
                inner join `user_groups` on `user_groups`.`id` = `meeting_user_group`.`user_group_id`
                inner join `user_user_group` on `user_user_group`.`user_group_id` = `user_groups`.`id`
            where `user_user_group`.`user_id` = 1
        )
        union
        (
            select `meetings`.`id`
            from `meetings`
            where `meetings`.`responsible_id` = 1
                and `meetings`.`responsible_id` is not null
        )
    )

关系:

    public function responsibleMeetings(): HasMany {
        return $this->hasMany(Meeting::class, 'responsible_id');
    }

    public function meetings(): BelongsToMany {
        return $this->belongsToMany(Meeting::class)->withTimestamps();
    }

    public function meetingsFromGroups(): HasManyDeep {
        return $this->hasManyDeepFromRelations($this->userGroups(), (new UserGroup())->meetings());
    }

我使用的是包Staudenmeir\EloquentHasManyDeepmeetingsFromGroups

我不能union在整个会议上都用,因为那样我会得到

SQLSTATE [21000]:违反基数:1222使用的SELECT语句的列数不同

由于枢纽领域。

SQL必须如何更改才能工作,我如何使用Eloquent进行更改?

哈里德·朱奈德(M Khalid Junaid)

默认情况下,whereIn期望arrayIN()在数组项上执行子句,但是在您的情况下,您正在发送并集查询,这就是它引发错误的原因。

$ids = $this->meetings()->select('meetings.id')
    ->union($this->meetingsFromGroups()->select('meetings.id'))
    ->union($this->responsibleMeetings()->select('meetings.id'))
    ->pluck('id')->all();

return Meeting::whereIn('id', $ids)->get();

另外whereIn接受一个封闭方法还,但不知道你会如何称呼这些relateables $this->meetings()$this->meetingsFromGroups()$this->responsibleMeetings()内关闭

return Meeting::whereIn('id', function($query){
    $query->select('...')
    ...;
})->get();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel雄辩:更新模型及其关系

来自分类Dev

Laravel雄辩的保存关系模型失败

来自分类Dev

雄辩的模型关系

来自分类Dev

Laravel-渴望加载雄辩模型的方法(不是关系)

来自分类Dev

Laravel雄辩的模型如何从关系表中获取数据

来自分类Dev

Laravel 5.1与许多模型的雄辩的远距离关系

来自分类Dev

Laravel雄辩的三个模型之间的多对多关系

来自分类Dev

如何通过雄辩的关系选择模型功能-Laravel?

来自分类Dev

具有分页的Laravel雄辩的查询递归关系模型

来自分类Dev

Laravel雄辩的查询关系

来自分类Dev

Laravel雄辩的关系混乱

来自分类Dev

Laravel雄辩的关系:-> latest()

来自分类Dev

Laravel雄辩的关系查询

来自分类Dev

Laravel雄辩的关系

来自分类Dev

Laravel雄辩和关系

来自分类Dev

Laravel雄辩的关系查询

来自分类Dev

Laravel 4雄辩的关系

来自分类Dev

Laravel 5.2 - 雄辩的关系

来自分类Dev

与 Laravel 5.4 的雄辩关系

来自分类Dev

Laravel 雄辩的 orderby 关系

来自分类Dev

雄辩的ORM条件模型关系

来自分类Dev

对关系方法的雄辩模型反思

来自分类Dev

Laravel雄辩的模型事件

来自分类Dev

雄辩的Laravel模型的__construct

来自分类Dev

Laravel雄辩的模型属性

来自分类Dev

Laravel:加入雄辩的模型

来自分类Dev

Laravel与外键雄辩的关系

来自分类Dev

与雄辩的Laravel建立hasMany关系

来自分类Dev

Laravel /雄辩的hasMany关系sum()