Php 将数组用作事件的参数时出错

Php 将数组用作事件的参数时出错,php,laravel,event-listener,Php,Laravel,Event Listener,当我将数组作为参数传递给TeamMemberUpdate事件时,出现以下错误: 传递给App\Events\Event::_construct()的参数1必须是给定的App\Models\Model、illumb\Database\Eloquent\Collection的实例 以下是我发起活动的地方: $teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get(); event(new T

当我将数组作为参数传递给
TeamMemberUpdate
事件时,出现以下错误:

传递给App\Events\Event::_construct()的参数1必须是给定的App\Models\Model、illumb\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);
}

您的事件类被定义为不处理数组,构造函数严格暗示
TeamMember的单个实例

public function __construct(TeamMember $teamMembers)
{
    $this->teamMembers = $teamMembers;
}
您可以将其更改为:

public function __construct($teamMembers)
{
    $this->teamMembers = $teamMembers;
}
这样一来,它既可以接受单个
团队成员
,也可以接受团队成员的
集合
。您可以执行
instanceof
检查以确定传入的内容

或者,您可以更改派遣方法:

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

这将为每个模型实例调度一个事件

,而不是
public function\uuu构造(TeamMember$teamMembers)
put
public function\uu构造(Collection$teamMembers)
为避免混乱,侦听器处理程序也应该接受Collection,事件,当调用事件时,它应该类似于
if(!($teamMembers instanceof Collection)){collect($teamMembers)}
应该在控制器的某个私有方法中。允许同一个构造函数变量(如这里的事件类)接受不同的类型不是一个好的做法。