Получение ошибки при вставке массива в качестве аргумента в Event - PullRequest
0 голосов
/ 01 мая 2019

При передаче массива в качестве аргумента события TeamMemberUpdating появляется следующая ошибка:

Аргумент 1, передаваемый в App \ Events \ Event :: __ construct (), должен бытьэкземпляр приложения \ Models \ Model, экземпляр Illuminate \ Database \ Eloquent \ Collection, заданный

Вот где я запускаю событие:

$teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get();
event(new TeamMemberUpdating($teamMembers));

Мое событие:

class TeamMemberUpdating
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $teamMembers;
/**
 * Create a new event instance.
 *
 * @return void
 */
public function __construct(TeamMember $teamMembers)
{
    $this->teamMembers = $teamMembers;
}
}

И мой слушатель handle() Метод:

public function handle(TeamMemberUpdating $event)

{   
    TeamMemberLog::insert($event->teamMembers);
}

1 Ответ

1 голос
/ 01 мая 2019

Ваш класс событий определен, чтобы не обрабатывать массивы, конструктор строго намекает на один экземпляр TeamMember

public function __construct(TeamMember $teamMembers)
{
    $this->teamMembers = $teamMembers;
}

Вы можете изменить его на:

public function __construct($teamMembers)
{
    $this->teamMembers = $teamMembers;
}

Таким образом, он будет принимать как одного TeamMember, так и Collection членов команды. Вы можете выполнить instanceof проверки, чтобы определить, что передается.

В качестве альтернативы вы можете изменить методику отправки:

$teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get();
$teamMembers->each(function ($teamMember) {
    event(new TeamMemberUpdating($teamMember));
});

Это отправит событие для каждого экземпляра модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...