Firstly as per the docs on Mass Assignment
Note: When using guarded, you should still never pass Input::get() or any raw array of user controlled input into a save or update method, as any column that is not guarded may be updated.
I don't know why this is, but as the docs say you should still never pass Input::get() or any raw array of user controlled input into a save or update method
Secondly:
$guarded = fields you don't want to be mass assigned, it is the opposite to $fillable, it is bettie to use one or the other.
$fillable = fields that can be mass assigned
$hidden = fields that aren't returned when you dd($model)