Model Factory Relationships
In this lesson, we'll learn how to use relationships with our Model Factories; easing our capabilities to quickly generate fake data with relationships.
- Author
- Tom Gobich
- Published
- Mar 18
- Duration
- 2m 54s
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
Model Factory Relationships
-
[MUSIC]
-
>> So ideally, every user that we have inside of
-
our application is going to have a profile as well.
-
That's going to ring true for the users that we're
-
creating inside of our fake seeder as well.
-
So what we can do to define that is,
-
we have both a profile and a user factory.
-
What we'll want to do is define the relationship
-
inside of this factory as well,
-
and then we can make use of that relationship inside of
-
our fake seeder so that anytime that we create a user,
-
we can create a relationship record for
-
that created user automatically just
-
using the relationship that we've defined on the factory itself.
-
So for example, similar to how on
-
our movie profile we're defining states,
-
we can chain off of the define method,
-
an additional method called relation.
-
The first argument to this relation method is
-
going to be the name of the relationship.
-
If we hit our strings there, we'll see that we have
-
a profile option at the ready because it's
-
extracting model relations from our user model.
-
So we can go ahead and fill that out with our profile.
-
Then the second argument to this relation call
-
is going to be a callback function.
-
This callback method is going to need to
-
return the related factory.
-
So in this case, that will be our profile factory.
-
We could just return that variable.
-
We don't need to do anything with it, and that's it.
-
So now we've defined that our user factory has
-
a relation of profile that should use
-
the profile factory anytime that we want to
-
generate out a relationship for our user.
-
Let's go ahead and take care of the inverse side of that as well.
-
So we'll jump over to our profile factory.relationUserFactory, and there we go.
-
Now, it's worth noting that you will want your relationship to
-
exist on the model before you
-
start defining your relationships inside of your factories,
-
because that's what this relation key right here in
-
the first argument is going to populate from.
-
So now with our factory relationships defined,
-
we can jump down to our fake seeder where we're
-
creating five users making use of our user factory.
-
Well, with this user factory,
-
we can specify that we want to create it with the profile relationship.
-
By default, this with method will create just one relationship.
-
But if you need multiple,
-
the second argument, you can provide
-
a count for the number of relations that should be created.
-
However, our user profile is a one-to-one,
-
so we'll only want one here.
-
Let's give that a save. Let's go ahead and hide our text editor away,
-
stop our server, clear that out.
-
Let's do node is migration refresh,
-
hyphen, hyphen, seed to roll back,
-
re-migrate, and re-seed everything. There we go.
-
Awesome. Let's go ahead and open back up PG Admin.
-
We'll dive into our servers,
-
Postgres server that we're working with.
-
We'll dive into our Adonis 6 database down to tables,
-
and let's right-click our users and view edit data.
-
We can just do all rows right now, it should just be five.
-
So we have our five user records right here with an ID of 1,
-
2, 3, 4, and 5.
-
Let's go ahead and right-click on our profiles.
-
What we would expect to see here is
-
five profile records with user IDs 1,
-
2, 3, 4, and 5,
-
defining that there's a relationship there for these records.
-
We see exactly that.
-
We have our user ID column right here with the values 1,
-
2, 3, 4, and 5,
-
meaning that this row right here is related to our user with an ID of 1.
-
This row right here is related to our user with an ID of 2,
-
3, 4, and 5, and so on and so forth,
-
as we continue to create records inside of both of these tables.
-
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!