Modeling a magazine
Magazine back issues have a number of common properties. For the purposes of this course, I'm going to limit the domain to two models. One for the publication as a unifying record and the second for the issues themselves. Each publication has a unique identifier, the publication id and a publication name. Magazine back issues are a little bit more complex. They have a unique identifier, the issue id, then the unifying record to the publication, publication id. As an issue number, which is the number given by the publisher and the date of publication, and finally the path to the file containing the cover. Let's switch to the IDE and start the models for the publication and issue. Models are stored in application models, navigate there now. There's currently nothing in there, except for the index place holder. I'm going to create a new file for the publication.
Same as controller names, the file name will be all lower case. Publication.php. In the empty file, let's start a new class. The class name must be the same as the file name with the exception that it must start with an uppercase letter. So publication and all remaining letters must be lowercase. You can use an underscore as well. Each model extends the coding nighter underscore model. Class. Save the empty class, then right-click on CI_Model and go to Navigate, Go To Declaration.
Let's see what it's actually doing. It's extremely minimal. The parent constructor is just sending a log message and provides a magic get method for allowing models to access loaded classes using the same syntax as controllers. In short, I've got a pretty blank slate. But that's cool. Close the CI model. I'm going to add two properties to the publication to store both unique identifier and the name. Remember to add proper documentation. Public publication_id then public publication name. I'm going to add documentation, so this will be an integer. This will be a string.
So this will be the location unique identifier, and this is a publication name. Save because that's all that's needed for now. I'll add persistence and other functionality in a moment. Next, I'll create the model for the issues themselves. Create a new file, called Issue.php. So, class issue, extends, ci_model. I'll start off with a public issue id, which will be issue unique identifier, which is an integer. Next will be a public publication id, which is a publication unifying record, which is an integer.
Then the public issue number which is the publisher assigned issue number also an integer. Public issue, date of publication. Date that the issue was published. Let's try that as a string. And finally a public issue_cover, which is the path to the file containing the cover image.
That will also be a string. Save the issue_model. I now have two models, which is enough to keep track of a simple collection of magazines. I built this wonderful place to put things in but how am I going to get the data?