Laravel4:检查多对多关系属性,即使该属性不存在

SimoA。

这是我第一次与Laravel和Stackoverflow合作...

我正在开发一个简单的课程管理系统。主要对象是UserCourse,它们之间具有多对多关系。数据透视表具有附加属性,participant_role它定义用户是该特定课程内学生还是教师

class Course extends Eloquent {
  public function users() {
    return $this->belongsToMany('User')->withPivot('participant_role')->withTimestamps();
  }
}

但是,还有一个附加角色system admin,可以在User对象上定义这让我非常头痛。在我的刀片视图中,我具有以下内容:

@if ($course->pivot->participant_role == 'instructor') {
  // do something here...
}

当已将用户分配给该特定用户$course并且在数据透视表中有此用户-课程组合的条目时,此方法会很好地工作

但是,问题出在系统管理员上,他也应该能够访问课程详细信息。上面的if子句给出了试图获取非对象错误的属性,显然是因为数据透视表中没有系统管理员的条目(因为角色是在User对象中定义的)。

我可能可以通过使用一些现成的捆绑包来处理基于角色的权限来解决该问题。或者我可以(但不想)用两个内部if子句做这样的事情:

if (!empty($course->pivot)) {
  if ($course->pivot->participant_role == 'instructor') {  
    // do something...
  }
}

其他选项(建议在Stackoverflow中的部分相似条目中使用)包括1)将所有数据透视表条目读取到数组,并使用in_array检查角色是否存在,甚至2)SQL左联接在数据库级别执行此操作。

但是,最终我正在寻找一种紧凑的单线解决方案吗?我可以做类似的事情,不幸的是,这似乎行不通吗?

if (! empty ($course->pivot->participant_role == 'instructor') ) {
  // do something...
}

答案越短越好:-)。非常感谢!

rmobis

我真的不认为有完美的方法可以做到这一点。您可以尝试以下方法之一:

一个,如果,&&运算符

if (!(empty($course->pivot) && $course->pivot->participant_role == 'instructor') {
    // ...
}

尽管这几乎是您不想一次完成的两个ifs,但它是单线的,并且由于短路评估而起作用,如果不评估第一个条件,则不会检查第二个条件已经是真的。

错误控制运算符(不推荐)

if (@$course->pivot->participant_role == 'instructor') {
    // ...
}

这可能是最短且外观更好的解决方案,但并不建议这样做。使用@运算符可以抑制包括严重错误在内的所有错误,减慢您的代码速度,并可能在以后调试代码时带来意外的麻烦。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel中不存在多对多关系

来自分类Dev

检查多对多关系或属性

来自分类Dev

EF反向POCO代码优先生成器多对多关系是指不存在的模型属性

来自分类Dev

筛选属性,即使它不存在

来自分类Dev

保存多对多关系,不存在同步/附加吗?

来自分类Dev

如果与给定属性不存在关系,则返回?

来自分类Dev

TypeScript构建错误:“ IStateParamsService”类型不存在该属性

来自分类Dev

Eloquent构建器实例上不存在该属性

来自分类Dev

数组元素上不存在该属性

来自分类Dev

Vue和TS上不存在该属性

来自分类Dev

为什么POST请求中不存在该属性?

来自分类Dev

django-rest-framework多对多关系。如果不存在则创建

来自分类Dev

JPQL查询多对多关系,其中联接表中不存在项

来自分类Dev

Django中的多对多关系“ ProgrammingError:列shoe_size_run.id不存在”

来自分类Dev

使用activerecord查找与特定用户不存在多对多关系的记录(ruby-on-rails)

来自分类Dev

Symfony 3.4 - 如果在多对多关系中不存在则坚持

来自分类Dev

在 Laravel 中使用 stock 属性设置多对多关系

来自分类Dev

Laravel 4多对多关系

来自分类Dev

属性形状不存在?

来自分类Dev

属性httpRequest不存在

来自分类Dev

方法/属性不存在

来自分类Dev

属性“类型”不存在

来自分类Dev

属性“ pixiOverlay”不存在

来自分类Dev

类属性不存在

来自分类Dev

如果不存在则在 Neo4j 中创建关系,如果存在则更新属性值

来自分类Dev

雄辩的:约束关系属性为0或不存在关系的渴望负载关系

来自分类Dev

Laravel-该集合实例上不存在属性

来自分类Dev

此集合中不存在 Laravel eloquent 属性

来自分类Dev

TypeScript 4-类型编号不存在属性查找[]

Related 相关文章

热门标签

归档