Adding A Profile Model, Migration, Factory, and Controller
Uh oh, a new requirement has come in and now we also need to account for user profiles! In this lesson, we'll learn how we can easily create a new model, migration, factory, and controller for an entity in one fell swoop!
- Author
- Tom Gobich
- Published
- Mar 11
- Duration
- 2m 57s
Developer, dog lover, and burrito eater. Currently teaching AdonisJS, a fully featured NodeJS framework, and running Adocasts where I post new lessons weekly. Professionally, I work with JavaScript, .Net C#, and SQL Server.
Adocasts
Burlington, KY
Transcript
Adding A Profile Model, Migration, Factory, and Controller
-
(upbeat music)
-
Our project manager says,
-
"Hey, we're also going to want our users
-
"to have some form of a basic profile
-
"that lists out movies that they have in their watch list
-
"or something of the sort."
-
So now we need a brand new table
-
that we haven't accounted for within our schema
-
or really anywhere.
-
So let's go ahead and add that in next.
-
For a profile, we're going to want it to have its own model
-
because it's not a pivot table.
-
So we'll do node ace make model
-
and let's do hyphen hyphen help here
-
to see the available options.
-
So if you remember back to when we first looked at this,
-
we could add in hyphen m, hyphen c, or hyphen f
-
to add in a migration, controller, and factory,
-
or any combination therein
-
for the model that we're creating.
-
So if we wanted to, we could do node ace make model profile,
-
hyphen m to add in a migration, c to add in a controller,
-
and f to add in a factory or the profile itself.
-
So we'll hit enter there
-
and you can see it added in a profile, a migration,
-
a controller, and a factory, all for our profile.
-
So with this single command,
-
we've now created everything that we're going to need now
-
and in the future for our profile model.
-
Let's go ahead and dive into our text editor,
-
scroll down to our new create profile migration.
-
First, we're going to want this to be related to our user.
-
So we'll do table, integer, user_id,
-
unsigned, references, users.id, and make that not nullable.
-
Now, for the most part,
-
the purpose of this profile model is to serve for an example
-
so we don't really have a whole lot to add onto it,
-
but for the sake of adding something to it,
-
let's go ahead and add maybe a user description to it.
-
So we can do text description, just like so.
-
It's a hefty column,
-
maybe we don't want it to be specifically on the user model,
-
so we'll have this separate profile model
-
that we can add in at any point to our user
-
via a relationship.
-
This could contain additional information
-
like social media information, users' website,
-
business information, stuff like that, if you wanted to,
-
but we'll leave it at just a description for now.
-
So we have that defined here.
-
Let's next go up to our models, profile,
-
we'll add in our column, declare_user_id of type number,
-
and column, declare_description of type string,
-
and I think we left that as nullable,
-
so we'll do that as nullable there.
-
And then we can go down to our profile factory
-
and add in a description column there of faker.
-
We'll just do lorem.paragraphs, like so,
-
and we also have our user_id.
-
For right now, we'll just hard code that as one
-
and give that a save.
-
The last thing that we need to do is run our migration
-
to create our profile table inside of our database.
-
So node.ace_migration_run,
-
and that will run just our create_profiles table.
-
In addition to that, we now also have three batches.
-
So if we run node.ace_migration_status,
-
we'll see a table printed out
-
that has all of our migrations as completed
-
because we've run them all,
-
and we now have batches one,
-
which contains most of our migrations,
-
two, where we altered and added in a sort order
-
to our cast_movies table,
-
And now three where we've created our user's profiles.
-
Introduction
-
Fundamentals
-
2.0Routes and How To Create Them5m 23s
-
2.1Rendering a View for a Route6m 29s
-
2.2Linking Between Routes7m 51s
-
2.3Loading A Movie Using Route Parameters9m 17s
-
2.4Validating Route Parameters6m 6s
-
2.5Vite and Our Assets6m 38s
-
2.6Setting Up Tailwind CSS9m 5s
-
2.7Reading and Supporting Markdown Content4m 32s
-
2.8Listing Movies from their Markdown Files8m 51s
-
2.9Extracting Reusable Code with Services7m 4s
-
2.10Cleaning Up Routes with Controllers4m 52s
-
2.11Defining A Structure for our Movie using Models9m 38s
-
2.12Singleton Services and the Idea of Caching6m 11s
-
2.13Environment Variables and their Validation4m 16s
-
2.14Improved Caching with Redis10m 44s
-
2.15Deleting Items and Flushing our Redis Cache6m 46s
-
2.16Quick Start Apps with Custom Starter Kits6m 28s
-
2.17Easy Imports with NodeJS Subpath Imports8m 40s
-
-
Building Views with EdgeJS
-
3.0EdgeJS Templating Basics8m 49s
-
3.1HTML Attribute and Class Utilities6m 9s
-
3.2Making A Reusable Movie Card Component10m 24s
-
3.3Component Tags, State, and Props4m 53s
-
3.4Use Slots To Make A Button Component6m 56s
-
3.5Extracting A Layout Component5m 13s
-
3.6State vs Share Data Flow2m 59s
-
3.7Share vs Global Data Flow6m 7s
-
3.8Form Basics and CSRF Protection6m 13s
-
3.9HTTP Method Spoofing HTML Forms3m 3s
-
3.10Easy SVG Icons with Edge Iconify7m 57s
-
-
Database and Lucid ORM Basics
-
4.0Configuring Lucid and our Database Connection4m 3s
-
4.1Understanding our Database Schema9m 35s
-
4.2Introducing and Defining Database Migrations18m 35s
-
4.3The Flow of Migrations8m 28s
-
4.4Introducing Lucid Models5m 43s
-
4.5Defining Our Models6m 49s
-
4.6The Basics of CRUD11m 56s
-
4.7Defining Required Data with Seeders11m 11s
-
4.8Stubbing Fake Data with Model Factories13m 48s
-
4.9Querying Our Movies with the Query Builder15m 30s
-
4.10Unmapped and Computed Model Properties3m 24s
-
4.11Altering Tables with Migrations7m 6s
-
4.12Adding A Profile Model, Migration, Factory, and Controller2m 57s
-
4.13SQL Parameters and Injection Protection9m 19s
-
4.14Reusable Query Statements with Model Query Scopes8m 11s
-
4.15Tapping into Model Factory States9m 15s
-
4.16Querying Recently Released and Coming Soon Movies4m 59s
-
4.17Generating A Unique Movie Slug With Model Hooks7m 59s
-
-
Lucid ORM Relationships
-
5.0Defining One to One Relationships Within Lucid Models5m 49s
-
5.1Model Factory Relationships2m 54s
-
5.2Querying Relationships and Eager Vs Lazy Loading5m 17s
-
5.3Cascading and Deleting Model Relationships5m 16s
-
5.4Defining One to Many Relationships with Lucid Models6m 56s
-
5.5Seeding Movies with One to Many Model Factory Relationships5m 24s
-
5.6Listing A Director's Movies with Relationship Existence Queries8m 41s
-
5.7Listing and Counting a Writer's Movies8m 41s
-
5.8Using Eager and Lazy Loading to Load A Movie's Writer and Director5m 18s
-
5.9Defining Many-To-Many Relationships and Pivot Columns9m 48s
-
5.10Many-To-Many Model Factory Relationships4m 50s
-
5.11A Deep Dive Into Relationship CRUD with Models18m 5s
-
5.12How To Create Factory Relationships from a Pool of Data13m 55s
-
5.13How To Query, Sort, and Filter by Pivot Table Data9m 47s
-
-
Working With Forms
-
6.0Accepting Form Data12m 15s
-
6.1Validating Form Data with VineJS9m 29s
-
6.2Displaying Validation Errors and Validating from our Request7m 16s
-
6.3Reusing Old Form Values After A Validation Error2m 3s
-
6.4Creating An EdgeJS Form Input Component5m 28s
-
6.5Creating A Login Form and Validator5m 1s
-
6.6How To Create A Custom VineJS Validation Rule9m 7s
-
-
Authentication & Middleware
-
The Flow of Middleware7m 49s
-
Authenticating A Newly Registered User4m 14s
-
Checking For and Populating an Authenticated User2m 10s
-
Logging Out An Authenticated User2m 24s
-
Logging In An Existing User6m 54s
-
Remembering A User's Authenticated Session6m 55s
-
Protecting Routes with Auth, Guest, and Admin Middleware5m 36s
-
-
Filtering and Paginating Queries
Join The Discussion! (0 Comments)
Please sign in or sign up for free to join in on the dicussion.
Be the first to Comment!