Как я могу использовать сообщения более высокого порядка с Eloquent? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть модель teacher, и у teacher есть отношение belongToMany с моделью student.

Я хочу использовать функцию сообщения более высокого порядка для sync a student ко многим teachers.

Обычно я делал бы следующее:

$teachers = Teacher::limit(5)->get();
$student = Student::first();

$teachers->each(function($teacher) use ($student) {
    $teacher->students()->sync($student)
});

С функциями более высокого порядка я мог бы делать:

// Throws error BadMethodCallException: Method Illuminate\Database\Eloquent\Collection::sync does not exist.
$teachers->each->students()->sync($student);

К сожалению, из-зак тому, как работают сообщения более высокого порядка, как определено внутри класса HigherOrderCollectionProxy, будет выполняться отношение students(), возвращающее коллекцию всех учеников, которых имеет учитель, вместо экземпляра отношения ownToMany.

Как я могу использоватьсообщения более высокого порядка с отношениями Laravel Eloquent?

1 Ответ

1 голос
/ 12 апреля 2019

Обратная логика.

$teacherIds = Teacher::limit(5)->pluck('id')->toArray();
$student = Student::first();

$student->teachers()->sync($teacherIds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...