Step 5 — Database setup

DeskFlow tasks should survive a server restart — store them in SQLite.

What you will learn

  • Confirm [db] in settings.ini (already in the template)
  • Write database/schema.sql and bin/init-db.php
Before you start

Confirm SQLite config

environment/settings.ini should include:

[db]
database_type=sqlite
database_name=database.sqlite3
default=true

Create schema

mkdir -p database bin

database/schema.sql:

CREATE TABLE IF NOT EXISTS tasks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    status TEXT NOT NULL DEFAULT 'open',
    assignee TEXT,
    project_id INTEGER,
    created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO tasks (title, status, assignee) VALUES
  ('Review homepage mockups', 'open', 'alex@northwind.studio'),
  ('Prepare sprint retro notes', 'done', 'alex@northwind.studio'),
  ('Update client project brief', 'open', 'jamie@northwind.studio');

bin/init-db.php:

#!/usr/bin/env php
<?php
$root = dirname(__DIR__);
$pdo = new PDO('sqlite:' . $root . '/database.sqlite3');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec((string) file_get_contents($root . '/database/schema.sql'));
echo "Initialized {$root}/database.sqlite3\n";
chmod +x bin/init-db.php
php bin/init-db.php

Common mistakes

  • Forgetting to run init-dbtask.list will fail in Step 6 with “no such table”.
  • Wrong working directory — run php bin/init-db.php from project root.