Adding Prisma to Remix

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
Search for a command to run...

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
No comments yet. Be the first to comment.
Most of you know me for my consistency, a golden arrow in my blog series. I've written 1000 articles in 1008 days! Almost an article a day, and my honeymoon was the only holiday I ever took. I'm super proud of this achievement; it has been a fantasti...

It's not the first time I'll be talking about community. I think it's an essential aspect of any successful tool. This shows in my previous explorations of Astro, Medusa, and now Vendure as well. All these products thrive in a super open, welcoming, ...

The cool part about Vendure is how easy it is to set up and how abstract each layer is. Basically, we get the following elements: External database Server Worker Admin UI Frontend While this is amazing, it also brings a bit of complexity when it co...

The previous article looked at customizing Vendure on a data and process level. In this article, we'll look at customizing emails, as they are often a big part of a webshop system. We'll be looking at two different layers of customization for customi...

Even though Vendure is a pretty significant project out of the box, in some cases, we might want to go in and modify some elements to work to our specific use case. In this article, I'll take a high-level look at some elements we can customize within...

As you might know, I'm a big fan of Prisma, and since we choose the indie stack when we set up our Remix project, it already comes with Prisma.
Since it already comes with Prisma installed, we can find the schema over in prisma/schema.prisma file.
Inside this, let's add the most basic post setup.
And while we are here, change the data source to Postgres.
datasource db {
provider = "postgres"
url = env("DATABASE_URL")
}
model Post {
slug String @id
title String
content String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Now open your .env file and the correct DATABASE_URL to your Prisma database instance.
For me it looks like this:
DATABASE_URL = 'postgresql://USER:[email protected]:5432/YOUR_DB';
Once you setup, run the following command to create the database.
npx prisma db push
We should have the database populated and visible in our database client.

So far, our model has been using the plain JSON file we had set up locally. Let's change it to be loaded from the Postgres database.
Open up the app/models/post.server.ts file and modify it to look like this.
import { prisma } from '~/db.server';
export async function getPosts() {
return prisma.post.findMany();
}
export async function getPost(slug: string) {
return prisma.post.findUnique({ where: { slug } });
}
This makes it way cleaner as well.
Note: Go ahead and add a post to your database. Either use the Prisma seeder or manually add one.
Now when we run our app, we don't have to make any other changes, and it will simply reflect this new data source!
A match made in heaven: Remix ❤️ Prisma.
If you want to see the completed code, it's hosted here on GitHub.
Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter