I suspect the attributes are not being filled by the setAttributes call because you have not declared them “safe” in the rules. If this is true, you’ll see something in your logs like “attempt to set unsafe attribute”.
If this is the problem, add this to your model (class Abc):
public function rules()
{
return array(
array('name,email', 'safe'),
);
}
The safe attribute only affects the bulk population function: setAttributes. You can still set unsafe attributes manually, e.g.
$w->name = "Fred";
You can also override the default behavior of setAttributes to read all attributes, not just the safe ones:
public void setAttributes(array $values, boolean $safeOnly=true)