mysql - 获取与另一个用户 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
解决方案
尝试使用User::doesntHave('parent')
而不是User::whereDoesntHave('parent')
正如文档所说(laravel 8):https ://laravel.com/docs/8.x/eloquent-relationships#querying-relationship-absence
whereDoesntHave
允许您指定 where 条件。由于您没有指定任何内容,我认为这就是您仍然让学生有父母的原因。
推荐阅读
- c# - 在删除对象之前/之后从队列/列表中删除对象?
- java - 如何在liferay 7中的liferay模块项目中从一个portlet的jsp重定向到另一个portlet的jsp
- python-3.x - numpy 将 csv 文件读取到 numpy 数组
- javascript - 控制器在 AJAX 期间不呈现 show.js.haml
- android - 如何找到文本的整个 X 和 Y 坐标?
- javascript - textarea resize 在 IE 中不起作用,我想在 IE 中 resize-y 并且它在 chrome 中起作用
- elasticsearch - 为什么它在运行 elastalert 时给出“没有为 [alert_time] 找到映射以便排序”错误?
- asp.net-core - .NET Core - 发布期间出现错误“NETSDK1067”
- pyspark - 如何在 pyspark anaconda 中添加 jar 文件?
- swift - Swift String:在小数点分隔符后附加 0