What am I trying to achieve?
I want to pass an existing instance of an Eloquent model to an event. In this case, the model is called Call
and the event is called AssignNewCall
. When the function assignUser($user)
is called, I want to fire the event.
How am I currently trying to do it?
Model: Call (uses AssignNewCall event)
/**
* Constructor for Call model.
*/
public function __construct(array $attributes)
{
parent::__construct($attributes);
if (isset($this->assignedTo) && $this->assignedTo != null) $this->assignedTo = array();
}
/**
* Adds user->id to model and fire event.
*/
public function assignUser($user) {
if($this->assignedTo != null) array_push($this->assignedTo, $user->id);
else $this->assignedTo = array($user->id);
event(new AssignNewCall($this));
}
Event: AssignNewCall (uses Call model)
public $call;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Call $call)
{
$this->call = $call;
}
What result am I getting?
When the event is fired at the end of assignUser
, it appears that the constructor of the model is being fired.
Too few arguments to function App\Models\Main\Call::__construct(), 0 passed in /home/vagrant/code/cad/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php on line 84 and exactly 1 expected
How is this relevant to other users?
What I'm looking for is whether or not I'm passing eloquent models correctly. How should they be passed through (or is it simply a syntax/logic mistake on my part?)