У меня есть таблица встреч, где я храню информацию о встрече и где я могу выбрать встречу между двумя типами пользователей пользователь типа посетителя и пользователь типа хоста. У меня много-много отношений между пользователями и собраниями, поэтому у меня есть сводная таблица meeting_user. Мне нужно отправить письмо всем выбранным пользователям для одной встречи.
Я пытаюсь отправить электронное письмо, используя это, но он сохраняет meeting_id в столбце notifiable_id базы данных. так как я могу сохранить users_id в столбце notifiable_id базы данных.
$meetings->save();
$meetings->users()->attach($request->user_id);
$users = Meeting::with('users')->get();
\Mail::to($user->send(New NewMeeting($meetings('id')));
@ thisiskelvin Одна встреча с несколькими пользователями.
Существует два сценария, в которых вы можете отправить электронное письмо пользователям на собрание:
Если вы хотите отправить электронное письмо добавленным пользователям, вы можете сделать следующее:
...
$meeting = Meeting::find($meeting_id);
$user = User::find($request->user_id);
$meeting->users()->attach($user->id);
\Notification::send($user, new NewMeetingNotification($user));
Это должно быть добавлено в код который только добавляет пользователя к собранию, а не нескольких пользователей.
В случае, если вы хотите отправить пользователям сразу несколько электронных писем, после добавления всех пользователей вы можете сделать следующее.
...
$meeting = Meeting::with('users')->where('id', $meeting_id)->first();
$meeting->users()->each(function ($user, $key) {
\Notification::send($user, new NewMeetingNotification($user));
});
$meeting_id
- это встреча, о которой идет речь.
Если модель user
имеет черту уведомляемый, вы можете изменить код на:
...
$meeting = Meeting::with('users')->where('id', $meeting_id)->first();
$meeting->users()->each(function ($user, $key) {
$user->notify(new NewMeetingNotification($user));
});
Надеюсь, это поможет.
Здесь для первого раздела отображается ошибка \Notification::send($meeting->users, new NewMeetingNotification($meeting->users);
syntax error, unexpected ';', expecting ',' or ')'
, а во втором сохраняется идентификатор сводной таблицы, а не user_id
.
@ Md.AbuZaman Обновленный ответ на первую ошибку. Вы имели в виду вторую ошибку?
@ Md.AbuZaman Можете ли вы обновить свой вопрос с помощью файла модели meetings
, чтобы увидеть взаимосвязь
В первом ответе отсутствовала скобка, но теперь она отправляет уведомления всем пользователям. но я хочу отправить уведомление только о встрече с новыми пользователями. И второй ответ - хранение pivot tbale id
, а не user_id
.
Я имею в виду, что когда я создаю встречу с 4 пользователями, я просто хочу отправить уведомления этим 4 пользователям.
@ Md.AbuZaman Я начинаю понимать. Второй ответ сделает это. Однако я предполагаю, что связь между meetings
и users
может быть неправильно установлена на модели meeting
? Не могли бы вы выложить свою модель meeting
?
@thisiskelvin Вот встреча с моделью public function users(){ return $this->belongsToMany('App\User', 'meeting_user'); }
Не могли бы вы перейти на return $this->belongsToMany('App\User', 'meeting_user', 'meeting_id, 'user_id');
и посмотреть, работает ли он. Я думаю, это может вызвать проблему, поскольку таблица должна быть meetings_users
вместо meeting_user
?
@thisiskelvin Я заменил модель, но это ваш первый ответ, отправляющий уведомление всем пользователям.
@ Md.AbuZaman Сколько пользователей было создано при тестировании? Сколько было прикреплено к встрече и на сколько было отправлено электронное письмо?
У меня уже есть пользователи. Когда я создаю встречу, я просто выбираю 2 пользователя посетителей и 3 пользователей типа хоста.
У меня 10 пользователей, и когда я создаю новую встречу с 4 пользователями, он отправляет уведомление всем 10 пользователям.
Пожалуйста, посмотрите эти изображения. drive.google.com/open?id=1JQKknmwNb7IdWFvVyaigFc-pr9MHKAkP
На данный момент, каждый раз, когда вы прикрепляете пользователя, он отправляет электронное письмо всем пользователям. Я предполагаю, что вы либо хотите отправить электронное письмо с вложением новому прикрепленному пользователю, либо хотите отправить электронное письмо всем пользователям в разное время. Мое предложение заключалось в том, чтобы либо разделить логин, который добавляет пользователя к собранию (а затем отправлять электронные письма на другом этапе массово), либо отправить только одно электронное письмо после того, как пользователь будет прикреплен.
Я прикрепил пользователей, отобранных для каждой встречи. И мне просто нужно отправить этих прикрепленных пользователей только на эту встречу. Затем я снова создал еще одну встречу, затем она снова подключила этих новых пользователей, и мне просто нужно отправить им письмо. Но ваш код 2-3 раза рассылает почту одним и тем же пользователям.
Вы хотите отправлять электронные письма, когда пользователь добавляется к встрече, или все сразу?
Я хочу отправлять почту, когда пользователи добавляются к собранию. Например, когда я создаю встречу и выбираю 4 пользователей для встречи, мне просто нужно отправить письмо этим 4 пользователям с этой информацией о встрече.
@ thisiskelvin Now it's showing Undefined variable: meeting_id
Я не знаю, почему вы снова передаете $ user в new NewMeetingNotification($user)
Meeting_id относится к идентификатору рассматриваемой встречи, вам нужно будет создать логику для его получения.
$ user передается для использования сведений о пользователе (например, имени) в шаблоне электронной почты. Если вы хотите включить это в свое электронное письмо, проведите дополнительное исследование, в противном случае удалите его.
Что хранит переменная
$meetings
? Одна встреча или несколько?