This method performs the following steps in order:
1. call [[beforeValidate()]] when $runValidation is true. If [[beforeValidate()]]
returns false, the rest of the steps will be skipped;
2. call [[afterValidate()]] when $runValidation is true. If validation
failed, the rest of the steps will be skipped;
3. call [[beforeSave()]]. If [[beforeSave()]] returns false,
the rest of the steps will be skipped;
4. insert the record into database. If this fails, it will skip the rest of the steps;
5. call [[afterSave()]];
In the above step 1, 2, 3 and 5, events [[EVENT_BEFORE_VALIDATE]],
[[EVENT_AFTER_VALIDATE]], [[EVENT_BEFORE_INSERT]], and [[EVENT_AFTER_INSERT]]
will be raised by the corresponding methods.
Only the [[dirtyAttributes|changed attribute values]] will be inserted into database.
If the table's primary key is auto-incremental and is null during insertion,
it will be populated with the actual value after insertion.
For example, to insert a customer record:
php
$customer = new Customer;
$customer->name = $name;
$customer->email = $email;
$customer->insert();