![見出し画像](https://assets.st-note.com/production/uploads/images/140893543/rectangle_large_type_2_e6a5405cd8ab02a3faa3e47fd7f54628.png?width=1200)
[ShopifyApp]Prismaでデータベース作ってみる(基本的な使い方確認)・Remixでアプリ作ってみる #day3
こんにちは。Shopify専門エンジニアのまりん(@crowd37cord)です。
前回下記で作ったSettingsページを使って、Prismaでデータベース作って追加&更新できるようにしてみます!
🔸前回の続き
✔️今日のゴール
↓Prismaと連携させる
![](https://assets.st-note.com/img/1715924129153-VJiclByrYb.png?width=1200)
✔️作成手順
Step1 まずはPrismaでデータベースを作る
前回作った基本設定のフォーム画面のデータベースを作るので、
![](https://assets.st-note.com/img/1715915775940-po7F8VY4yt.png?width=1200)
・ID
・姓 (lastName)
・名 (firstName)
が必要。
Prima>schema.prismaを開いて、
![](https://assets.st-note.com/img/1715915963453-9mL4LR26AB.png?width=1200)
model Settings {
id Int @id
firstName String
lastName String
}
書き方は公式ドキュに載ってる。
Settingsのテーブルを追加して、マイグレーション。下記をコマンドラインで実行。
npx prisma migrate dev --name お好みのファイル名
add_db_settingsというファイル名にしました!無事、migrationsフォルダ内に作成できてます。
![](https://assets.st-note.com/img/1715916220146-eZxzwuv7tt.png?width=1200)
あとは、Prismaスタジオを開く。
npm run prisma studio
![](https://assets.st-note.com/img/1715916337164-vE0SuAsEMZ.png?width=1200)
Prismaスタジオをプレビューすると下記のテーブルができてます🎵
![](https://assets.st-note.com/img/1715916375818-dGF7kEx8Pg.png?width=1200)
次はShopifyアプリの管理画面からデータベースに設定を保存&更新できるようにしていきます。
Step2 データベースと管理画面を紐付け
app.day1.jsxのファイルを開いて、db.serverをインポート。
import db from "../db.server";
Loarder内をfindFirst()でデータベースの値を取得するコードに書き換え。さっきSettingsというテーブルを作ったのでdb内のSettingsを見るように記載。
export async function loader() {
let settings = await db.settings.findFirst();
return json(settings);
}
Action内にはupsert()でcreate()とupdate()を書いていきます。upsert()だとデータが存在してない時には新規データを登録できて、すでに存在データの更新もできちゃうので便利。
🔸こちらの公式Doc内をそのまま書くだけ
await db.settings.upsert({
where: {
id: 1,
},
create: {
id: 1,
lastName: settings.lastName,
firstName: settings.firstName
},
update: {
id: 1,
lastName: settings.lastName,
firstName: settings.firstName
}
})
最後にNullの時にエラーが出るのでForm内のInput入力のバリューを変更しておきます。formStateの後ろに「?」をつける。
(前){formState.lastName} → (後){formState?.lastName}
(前){formState.firstName} → (後){formState?.firstName}
<Form method='POST'>
<BlockStack gap="400">
<TextField label="姓" name='lastName' value={formState?.lastName} onChange={(value) => setFormState({...formState, lastName: value})} />
<TextField label="名" name='firstName' value={formState?.firstName} onChange={(value) => setFormState({...formState, firstName: value})} />
<Button submit={true}>更新</Button>
</BlockStack>
</Form>
これで、管理画面から更新できるかチェック!
デフォルトだと空欄
![](https://assets.st-note.com/img/1715917237747-IQ6gh1sC4K.png?width=1200)
氏名を入力して更新ボタンをクリック
![](https://assets.st-note.com/img/1715917276611-xZCQcm35p5.png?width=1200)
データベースに反映されました🎵
![](https://assets.st-note.com/img/1715917282352-h7EKhIiDRY.png?width=1200)
リロードしてもショッピファイ管理画面がわでデータが表示されたままになってますね。
以上で完成です!
これで一通り基本的なRemix、Prismaの使い方がわかったので、これを応用して今後はアプリを作成していきます!