[ ] Is it worth it to use a separate Data Access Object
Current issues
each model creates its own database connection. it is not possible to share connections across models for transactions. sharing of connection can be useful: OrderProduct::save() can be used in Order::save() which uses a transaction.
the same model is being used for saving user data and saving data from database. in validate function, it is not possible to know whether or not to validate attributes like ID: if data comes from user, ID should not be validated (because it will be set by database later) but if the data comes from the database should you validate the ID
Current issues