{"id":5299,"date":"2022-09-21T08:40:12","date_gmt":"2022-09-21T12:40:12","guid":{"rendered":"https:\/\/www.cloudsurph.com\/?p=5299"},"modified":"2022-09-21T08:42:22","modified_gmt":"2022-09-21T12:42:22","slug":"adonisjs-model-relationships","status":"publish","type":"post","link":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/","title":{"rendered":"AdonisJS: Model relationships"},"content":{"rendered":"<p>In this article, we will learn about AdonisJS Model relationships, how Adonis supports these relationship types, the different types of database relationships, and how to define these relationships.<\/p>\n<h3>Model Relationship Options<\/h3>\n<p>Defining <a href=\"https:\/\/preview.adonisjs.com\/guides\/model-relations\/introduction\">AdonisJS Model relationships<\/a> within our models unlocks a whole lot of power when it comes to querying and persisting data within our application database.<\/p>\n<p>Here, within our model, we will use both types and decorators to define a relationship.<\/p>\n<p><a href=\"https:\/\/www.cloudsurph.com\/love-to-code\/\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5301\" src=\"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/love-to-code-banner.jpg\" alt=\"love-to-code-Cloudsurph\" width=\"1000\" height=\"563\" srcset=\"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/love-to-code-banner.jpg 1000w, https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/love-to-code-banner-980x552.jpg 980w, https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/love-to-code-banner-480x270.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1000px, 100vw\" \/><\/a><\/p>\n<h5><strong>AdonisJS provides us with a <a href=\"https:\/\/preview.adonisjs.com\/guides\/model-relations\/introduction#points-to-note\">decorator and a type for each type of relationship<\/a>.<\/strong><\/h5>\n<h5><em><strong>You can purchase your\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/\">hosting from Cloudsurph.com<\/a>,\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/\">Cloudsurph hosting<\/a>\u00a0is a reliable hosting option for business and personal projects. We offer insight and help on system configuration issues and code errors or bugs<\/strong>.<\/em><\/h5>\n<p>So now, to start, we need to first understand the relationships and what we need to define for our users, then we will take a look at the options Lucid provides to us, and for more information need we can see Adonis\u2019s main site.<\/p>\n<h3>Defining Our User&#8217;s Relationships<\/h3>\n<p>If we inspect our User model, you will see we don&#8217;t have a single relatable column defined.<\/p>\n<p>However, if we review our other models you will see both Project and Task contain columns that related back to our User.<\/p>\n<h4>So, Let&#8217;s walk through these relationships and their relationship types:<\/h4>\n<p><strong>Tasks=&gt;created_by=&gt;<\/strong> It is a many-to-one relationship from our User and our user can create many tasks, but a task can only be created by one user.<\/p>\n<p><strong>tasks=&gt;assigned_to=&gt; <\/strong>It is a many-to-one relationship with our User and the user can have many tasks assigned to them, but a task can only be assigned to one user.<\/p>\n<p><strong>project_users=&gt;user_id=&gt; <\/strong>It is a many-to-many and a user can be a member of many projects and a project will have many users.<\/p>\n<p><strong><em>Love to Code? We\u2019re Your Helping Partner,\u00a0<a href=\"https:\/\/www.cloudsurph.com\/love-to-code\/\">click here for<\/a>\u00a0\u00a0<a href=\"https:\/\/www.cloudsurph.com\/love-to-code\/\">Buy Our Service<\/a><\/em><\/strong><\/p>\n<h3>How Do I Know Which to Use?<\/h3>\n<p>We can enter our relationships and have them correlate pretty closely to one of Adonis\u2019s relationship names.<\/p>\n<p>So, one of our relationships is here to see how to determine which relationship type to use for a given relationship, and here we can follow some basic ideas:<\/p>\n<p><em>**If my user can have many tasks, then we can use HasMany to define this relationship from our User.<\/em><\/p>\n<p><em>**If my task belongs to a specific user, then we can use <strong>BelongsTo<\/strong> to define the relationship between our Tasks.<\/em><\/p>\n<p><em>**Finally, we just need to define both sides of this relationship and use <strong>HasMany<\/strong> on our User model and <strong>BelongsTo<\/strong> on our Task model.<\/em><\/p>\n<h3>How to Define A Relationship<\/h3>\n<p>Now if we&#8217;ve described our user&#8217;s relationships and what our relationship options are, then we can learn how to define our relationships.<\/p>\n<p><strong><em>You can check our previous article:\u00a0<a href=\"https:\/\/www.cloudsurph.com\/adonisjs-rest-api-crud-setup\/\">AdonisJS: REST API simple CRUD Operation<\/a>. IF you want then buy a good, reliable, secure web\u00a0<a href=\"https:\/\/www.cloudsurph.com\/windows-vps-hosting\/\">hosting<\/a>\u00a0service \u00a0from here:\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/\">click here<\/a><\/em><\/strong><\/p>\n<p>So, for our user&#8217;s relationship to task&#8217;s <strong>created_by<\/strong> column and we can define the many-to-one relationship like below:<\/p>\n<pre class=\"prettyprint\">import { hasMany, HasMany, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport Task from 'App\/Models\/Task'\r\n\r\nexport default class User extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@hasMany(() =&gt; Task, {\r\nforeignKey: 'createdBy'\r\n})\r\npublic tasks: HasMany&lt;typeof Task&gt;\r\n}\r\n<\/pre>\n<p>Now, we have one side of our relationship defined and we need to hop over to our Task model and define the other side of the relationship.<\/p>\n<pre class=\"prettyprint\">import { column, belongsTo, BelongsTo, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport User from 'App\/Models\/User'\r\n\r\nexport default class Task extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@column()\r\npublic createdBy: number\r\n\r\n@belongsTo(() =&gt; User, {\r\nlocalKey: 'createdBy'\r\n})\r\npublic user: BelongsTo&lt;typeof User&gt;\r\n}\r\n<\/pre>\n<h6>So, for example, our relationship will look like the below:<\/h6>\n<pre class=\"prettyprint\">export default class Task extends BaseModel {\r\n@column()\r\npublic userId: number\r\n\r\n@belongsTo(() =&gt; User)\r\npublic user: BelongsTo&lt;typeof User&gt;\r\n}\r\n<\/pre>\n<h3>Completing User Relations<\/h3>\n<p>So, here we have one of our <strong>User<\/strong> relationships done and dusted and our <strong>assignedTo<\/strong> relationship is going to be practically identical to our <strong>createdBy<\/strong>.<\/p>\n<h3>Assigned To (Many-To-One)<\/h3>\n<p>This is thanks to the relationship itself being defined by the decorator and we cannot have duplicates, since that would lead to overwriting a relationship.<\/p>\n<p>So, for our <strong>assignedTo<\/strong> to definition, we can change the property name from our tasks to <strong>assignedTasks<\/strong>.<\/p>\n<pre class=\"prettyprint\">import { hasMany, HasMany, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport Task from 'App\/Models\/Task'\r\n\r\nexport default class User extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@hasMany(() =&gt; Task, {\r\nforeignKey: 'createdBy'\r\n})\r\npublic tasks: HasMany&lt;typeof Task&gt;\r\n\r\n@hasMany(() =&gt; Task, {\r\nforeignKey: 'assignedTo'\r\n})\r\npublic assignedTasks: HasMany&lt;typeof Task&gt;\r\n}\r\n<\/pre>\n<h6>Next, we can define the other side of this relationship as below:<\/h6>\n<pre class=\"prettyprint\">import { column, belongsTo, BelongsTo, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport User from 'App\/Models\/User'\r\n\r\nexport default class Task extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@column()\r\npublic createdBy: number\r\n\r\n@column()\r\npublic assignedTo: number\r\n\r\n@belongsTo(() =&gt; User, {\r\nlocalKey: 'createdBy'\r\n})\r\npublic user: BelongsTo&lt;typeof User&gt;\r\n\r\n@belongsTo(() =&gt; User, {\r\nlocalKey: 'assignedTo'\r\n})\r\npublic user: BelongsTo&lt;typeof User&gt;\r\n}\r\n<\/pre>\n<h6>However, we can rename this property to something that makes sense for our relationship.<\/h6>\n<pre class=\"prettyprint\">import { column, belongsTo, BelongsTo, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport User from 'App\/Models\/User'\r\n\r\nexport default class Task extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@column()\r\npublic createdBy: number\r\n\r\n@column()\r\npublic assignedTo: number\r\n\r\n@belongsTo(() =&gt; User, {\r\nlocalKey: 'createdBy'\r\n})\r\npublic creator: BelongsTo&lt;typeof User&gt;\r\n\r\n@belongsTo(() =&gt; User, {\r\nlocalKey: 'assignedTo'\r\n})\r\npublic assignee: BelongsTo&lt;typeof User&gt;\r\n}\r\n<\/pre>\n<p>Here it will be probably making the most sense to change our <strong>createdBy&#8217;s<\/strong> user property name to creator and our <strong>assignedTo&#8217;s<\/strong> user property name to the assignee.<\/p>\n<pre class=\"prettyprint\">import { hasMany, HasMany, manyToMany, ManyToMany, \/* ... *\/ } from '@ioc:Adonis\/Lucid\/Orm'\r\nimport Task from 'App\/Models\/Task'\r\nimport Project from 'App\/Models\/Project'\r\n\r\nexport default class User extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@hasMany(() =&gt; Task, {\r\nforeignKey: 'createdBy'\r\n})\r\npublic tasks: HasMany&lt;typeof Task&gt;\r\n\r\n@hasMany(() =&gt; Task, {\r\nforeignKey: 'assignedTo'\r\n})\r\npublic assignedTasks: HasMany&lt;typeof Task&gt;\r\n\r\n@manyToMany(() =&gt; Project)\r\npublic projects: ManyToMany&lt;typeof Project&gt;\r\n}\r\n<\/pre>\n<h3>User Projects (Many-To-Many)<\/h3>\n<p>For the last relationship, we need to assign our User the many-to-many relationship for our user-to-project relationship.<\/p>\n<pre class=\"prettyprint\">export default class User extends BaseModel {\r\n\/* other fields *\/\r\n\r\n@manyToMany(() =&gt; Project, {\r\npivotTable: 'project_users'\r\n})\r\npublic projects: ManyToMany&lt;typeof Project&gt;\r\n}\r\n<\/pre>\n<p>If you want to know more about AdonisJS Model relationships then please visit <a href=\"https:\/\/preview.adonisjs.com\/guides\/model-relations\/introduction\">AdonisJs<\/a> main website.<\/p>\n<p>If you enjoyed reading this article and have more questions please reach out to our\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/submitticket.php?step=2&amp;deptid=1\">support team<\/a>\u00a0via live chat or\u00a0<a href=\"mailto:support@cloudsurph.com\">email<\/a>\u00a0and we would be glad to help you. we provide server\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/\">hosting<\/a>\u00a0for all types of need and we can even get your\u00a0<a href=\"https:\/\/hosting.cloudsurph.com\/\">server<\/a>\u00a0up and running with the service of your choice.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we will learn about AdonisJS Model relationships, how Adonis supports these relationship types, the different types of database relationships, and how to define these relationships. Model Relationship Options Defining AdonisJS Model relationships within our models unlocks a whole lot of power when it comes to querying and persisting data within our application [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":5300,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[152,157,25,159,1],"tags":[54,47,105,103,48,113],"class_list":["post-5299","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adonisjs","category-centos-7","category-web-hosting-virtualization","category-linux-server","category-virtual-private-servers","tag-best-vps-hosting-server-maryland","tag-cheap-cloud-servers","tag-cheap-storage-server-hosting","tag-cheapest-vps","tag-dedicated-server-hosting-in-washington-d-c","tag-speed-test-vps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AdonisJS: Model relationships -<\/title>\n<meta name=\"description\" content=\"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User&#039;s Relationships AdonisJS\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AdonisJS: Model relationships -\" \/>\n<meta property=\"og:description\" content=\"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User&#039;s Relationships AdonisJS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudsurph Web Hosting Washington D.C.\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/CloudSurph\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-21T12:40:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-21T12:42:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1264\" \/>\n\t<meta property=\"og:image:height\" content=\"760\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Rony\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cloudsurph\" \/>\n<meta name=\"twitter:site\" content=\"@Cloud_Surph\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rony\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/\"},\"author\":{\"name\":\"Rony\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#\\\/schema\\\/person\\\/ac9b4dd136d96e50d5f29c560191e7ed\"},\"headline\":\"AdonisJS: Model relationships\",\"datePublished\":\"2022-09-21T12:40:12+00:00\",\"dateModified\":\"2022-09-21T12:42:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/\"},\"wordCount\":778,\"publisher\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/AdonisJS-Model-relationships.jpg\",\"keywords\":[\"Best VPS hosting server Maryland\",\"Cheap Cloud Servers\",\"Cheap Storage Server Hosting\",\"Cheapest VPS\",\"Dedicated Server Hosting in Washington D.C\",\"Speed test VPS\"],\"articleSection\":[\"AdonisJS\",\"CentOS 7\",\"Cloud Hosting\",\"Linux Server\",\"VPS Servers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/\",\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/\",\"name\":\"AdonisJS: Model relationships -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/AdonisJS-Model-relationships.jpg\",\"datePublished\":\"2022-09-21T12:40:12+00:00\",\"dateModified\":\"2022-09-21T12:42:22+00:00\",\"description\":\"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User's Relationships AdonisJS\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/AdonisJS-Model-relationships.jpg\",\"contentUrl\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/AdonisJS-Model-relationships.jpg\",\"width\":1264,\"height\":760,\"caption\":\"AdonisJS Model relationships\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/adonisjs-model-relationships\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cloudsurph.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AdonisJS: Model relationships\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#website\",\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/\",\"name\":\"Cloudsurph Web Hosting Washington D.C.\",\"description\":\"Dedicated Server Hosting\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.cloudsurph.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#organization\",\"name\":\"CloudSurph Technology Solutions\",\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2016\\\/04\\\/cloudsurph-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.cloudsurph.com\\\/wp-content\\\/uploads\\\/2016\\\/04\\\/cloudsurph-logo.png\",\"width\":2348,\"height\":1692,\"caption\":\"CloudSurph Technology Solutions\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/CloudSurph\\\/\",\"https:\\\/\\\/x.com\\\/Cloud_Surph\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.cloudsurph.com\\\/#\\\/schema\\\/person\\\/ac9b4dd136d96e50d5f29c560191e7ed\",\"name\":\"Rony\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g\",\"caption\":\"Rony\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/cloudsurph\"],\"url\":\"https:\\\/\\\/www.cloudsurph.com\\\/author\\\/ron\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AdonisJS: Model relationships -","description":"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User's Relationships AdonisJS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/","og_locale":"en_US","og_type":"article","og_title":"AdonisJS: Model relationships -","og_description":"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User's Relationships AdonisJS","og_url":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/","og_site_name":"Cloudsurph Web Hosting Washington D.C.","article_publisher":"https:\/\/www.facebook.com\/CloudSurph\/","article_published_time":"2022-09-21T12:40:12+00:00","article_modified_time":"2022-09-21T12:42:22+00:00","og_image":[{"width":1264,"height":760,"url":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg","type":"image\/jpeg"}],"author":"Rony","twitter_card":"summary_large_image","twitter_creator":"@cloudsurph","twitter_site":"@Cloud_Surph","twitter_misc":{"Written by":"Rony","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#article","isPartOf":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/"},"author":{"name":"Rony","@id":"https:\/\/www.cloudsurph.com\/#\/schema\/person\/ac9b4dd136d96e50d5f29c560191e7ed"},"headline":"AdonisJS: Model relationships","datePublished":"2022-09-21T12:40:12+00:00","dateModified":"2022-09-21T12:42:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/"},"wordCount":778,"publisher":{"@id":"https:\/\/www.cloudsurph.com\/#organization"},"image":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg","keywords":["Best VPS hosting server Maryland","Cheap Cloud Servers","Cheap Storage Server Hosting","Cheapest VPS","Dedicated Server Hosting in Washington D.C","Speed test VPS"],"articleSection":["AdonisJS","CentOS 7","Cloud Hosting","Linux Server","VPS Servers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/","url":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/","name":"AdonisJS: Model relationships -","isPartOf":{"@id":"https:\/\/www.cloudsurph.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg","datePublished":"2022-09-21T12:40:12+00:00","dateModified":"2022-09-21T12:42:22+00:00","description":"Defining Model Relationships, AdonisJS: Model relationships, AdonisJS Model Relationship Options, Defining Our User's Relationships AdonisJS","breadcrumb":{"@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#primaryimage","url":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg","contentUrl":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2022\/09\/AdonisJS-Model-relationships.jpg","width":1264,"height":760,"caption":"AdonisJS Model relationships"},{"@type":"BreadcrumbList","@id":"https:\/\/www.cloudsurph.com\/adonisjs-model-relationships\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cloudsurph.com\/"},{"@type":"ListItem","position":2,"name":"AdonisJS: Model relationships"}]},{"@type":"WebSite","@id":"https:\/\/www.cloudsurph.com\/#website","url":"https:\/\/www.cloudsurph.com\/","name":"Cloudsurph Web Hosting Washington D.C.","description":"Dedicated Server Hosting","publisher":{"@id":"https:\/\/www.cloudsurph.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cloudsurph.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.cloudsurph.com\/#organization","name":"CloudSurph Technology Solutions","url":"https:\/\/www.cloudsurph.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cloudsurph.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2016\/04\/cloudsurph-logo.png","contentUrl":"https:\/\/www.cloudsurph.com\/wp-content\/uploads\/2016\/04\/cloudsurph-logo.png","width":2348,"height":1692,"caption":"CloudSurph Technology Solutions"},"image":{"@id":"https:\/\/www.cloudsurph.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/CloudSurph\/","https:\/\/x.com\/Cloud_Surph"]},{"@type":"Person","@id":"https:\/\/www.cloudsurph.com\/#\/schema\/person\/ac9b4dd136d96e50d5f29c560191e7ed","name":"Rony","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/40163fe1eb49d5eddd81954e8ad5122633e141df15b0733d07fbe4a156688ba5?s=96&d=mm&r=g","caption":"Rony"},"sameAs":["https:\/\/x.com\/cloudsurph"],"url":"https:\/\/www.cloudsurph.com\/author\/ron\/"}]}},"_links":{"self":[{"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/posts\/5299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/comments?post=5299"}],"version-history":[{"count":1,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/posts\/5299\/revisions"}],"predecessor-version":[{"id":5302,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/posts\/5299\/revisions\/5302"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/media\/5300"}],"wp:attachment":[{"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/media?parent=5299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/categories?post=5299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudsurph.com\/wp-json\/wp\/v2\/tags?post=5299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}