Snippets

The ASCI Extend Model in Existing Class

You are viewing an old version of this snippet. View the current version.
Revised by Austin c43390a

I'm going to use PaymentTransaction as the example as I work through the conversion. This way I can note tips and tricks to save some future headache.

Steps


  1. Change class PaymentTransaction to class PaymentTransaction extends Model
  2. Remove any private class variables associated with db columns (e.g. $created).
  3. For PaymentTransaction many of the class variables were named with underscores in the way they are in the databases.
    • If this is not the case, the getters and setters need to be updated to reference the appropirate column variables. (e.g. $this->poNumber would need to become $this->po_number when the db column is named po_number.
      • My suggestion would be to keep all of the getters and setters, at least at this point. This will maintain compatability with existing code. I also personally like the getters and setters.
    • The next thing I did was run the tests. This caught variables in the FactoryMuffin object that were mis-named. (e.g. PaymentTransaction factory used invoiceId and needed to be changed to invoice_id. This is more than just in the FactoryMuffin definition, because there was some custom construction of these factories in various test suites.)
  4. Look through CRUD methods implemented in the class (e.g. save(), delete(), etc). Remove them.
    • PaymentTransaction::save() was a little more complicated than a simple update of attributes in the database. It also called upon invoice to update its balance.

Notes


Test Failures

* Many test failures will be resolved easily by remaning properties etc. 
* I had test failues due to date issues. `PaymentTransaction::check_deposit_date` was being saved as a `date` while `PaymentTransaction::created` was `datetime`. The switch to ActiveRecord caused some weirdness in the Reporter that had an if/else query on those two fields. The factory was creating a date from `created` while expecting it to be a string. Simply setting it as a Date object resolved this issue.
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.