首页 > 解决方案 > 获取与另一个用户 morphToMany laravel 没有关系的用户

问题描述

我有用户表并有 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

标签: mysqllaravel

解决方案


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

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

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


推荐阅读