我定义了StudentSeminar模型之间的多对多关系。如何确定一名特定学生是否正在参加一名特定研讨会?我想要实现的非工作示例如下所示:

$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();

09-25 15:39