我定义了Student
和Seminar
模型之间的多对多关系。如何确定一名特定学生是否正在参加一名特定研讨会?我想要实现的非工作示例如下所示:
$seminar->students()->contains($student->id);
使用上面的代码片段时,显示以下错误:
最佳答案
请尝试:
$seminar->students->contains($student->id);
假设
$student
包含Student
模型的实例,您可以进一步简化它,只需使用:$seminar->students->contains($student);
添加括号时,您使用的是Laravel查询构建器,而您从未完成查询。要以您原来的方式进行操作,您需要:
$seminar->students()->get()->contains($student->id);
如果要在获取学生时添加约束,则此方法可能很有用。
但通常您可以省略括号,并返回一个Collection,使您可以使用
contains
之类的方法。这样做的另一个好处是,一旦加载了关系,就不必重新查询数据库,因此,通常这将是获取关系的一种更为有效的方法。
如果您尚未加载学生并且想要一种数据库有效的检查方法,则可以使用:
$seminar->students()->where('students.id', $student->id)->exists();