【问题标题】:Get Users who are not have relation with another user morphToMany laravel获取与另一个用户 morphToMany laravel 没有关系的用户
【发布时间】:2021-03-15 12:01:10
【问题描述】:

我有用户表并有 4 个角色(学生、教师、超级管理员、家长)。 我正在使用此代码在 laravel 中使用 Morphtomany 关系将父母与学生联系起来

  public function Parent()
    {
        return $this->morphToMany('App\Models\User', 'user_parent');
    }

当超级管理员想要创建一个新用户并选择一个角色作为家长时,将出现学生列表,以便从具有学生角色的用户中选择孩子的名字。 我只想选择与父母没有联系的学生(仍然与父母没有关系的学生)。 我正在使用此代码从数据库中获取学生

   $users = User::whereDoesntHave('Parent')->whereHas(
            'roles', function($q){
            $q->where('id', 5);
        }
        )->get();

但此代码也返回有父母的学生。我不想检索。

这是表的架构

CREATE TABLE `user_parents` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_parent_id` bigint(20) DEFAULT NULL,
  `user_parent_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3157 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    尝试使用User::doesntHave('parent') 而不是User::whereDoesntHave('parent')

    正如文档所说(laravel 8):https://laravel.com/docs/8.x/eloquent-relationships#querying-relationship-absence

    whereDoesntHave 允许您指定 where 条件。由于您没有指定任何内容,我认为这就是您仍然让学生有父母的原因。

    【讨论】:

    • 谢谢你的回复,实际上我试过了,结果一样,它返回了所有学生,即使是那些有父母的学生
    • 为什么要使用变形关系?你不能使用 hasMany 吗?
    • 我所做的,我不想改变它
    • 你能用你的表格列更新你的问题吗?
    • 感谢回复,我刚刚用表格架构更新了问题,请检查
    猜你喜欢
    • 1970-01-01
    • 2016-05-16
    • 2020-06-26
    • 2014-09-17
    • 2019-02-19
    • 2023-03-10
    • 2018-12-29
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多