Record

データベースアクセスの手段として、ParisのModelを拡張したクラスRecordを用意しています。

設定

setup_db($host, $port, $name, $user, $password)

bootstrap.phpで初期化します。

使い方

Pachira\RecordはParisのModelを継承しているので、Parisの機能は全てそのまま使えます。

class ArticleRecord extends \Pachira\Record {
  public static $_table = "articles";
}

Record::load($id)

loadメソッドを使うと、IDカラムから検索してレコードを返します。

$article = ArticleRecord::load($article_id);
$article->name = el($post, "name");
$article->save();

Record::load_by($key, $val)

IDではなく任意のカラムからレコードを検索することもできます。

$article = ArticleRecord::load_by("slug", "pachira");

Record::load_by_post($post)

$_POSTのような連想配列から、レコードを取得もしくは作成し、指定されたカラムを自動で上書きすることができます。これを使うと、upsert(update+insert)が簡単に書けるようになります。

// DBから取得する場合はidを指定
$post = [
  "id" => $id,
  "name" => $name,
  "title" => $title
];
$article = ArticleRecord::load_by_post($post);
$article->save();

// 新規作成する場合
$post = [
  "name" => $name,
  "title" => $title
];
$article = ArticleRecord::load_by_post($post);
$article->save();

$postから上書きするプロパティの指定

クラス変数$scalarsを記述することで、プロパティを指定することができます。下記の記述で、$postに"name", "title"が含まれていれば自動で上書きされるようになります。

class ArticleRecord extends \Pachira\Record {
  public static $_table = "articles";
  public static $scalars = ["name", "title"];
}

Record::all()

全てのレコードを取得します。

$articles = ArticleRecord::all()

Record::last()

最後に挿入したレコードを取得します。

$article = ArticleRecord::last();

Record::m()

ParisのModel::Factory($class_name)のショートハンドです。ActiveRecordをそのまま使いたい時に使います。

$articles = ArticleRecord::m()->where("foo", "bar")->find_many();

$record->save_key($key, $val)

$article->save_key("title", "タイトル");

// 以下のショートハンド
$article->title = "タイトル";
$article->save();

transaction($fn)

transaction(function(){
});