ヒビノログ

個人的なメモを淡々と記録していくブログ。最近はLaravelやスマートフォンの話題など。

Laravel Eloquent ORMの複合キー対応

Laravel の Eloquent ORM を使ってデータの更新を行う場合、単一の主キーを持つテーブルであれば何の問題もないのですが、複合主キーを持つ場合はちょっと工夫が必要です。

といってもクエリービルダが用意されているので、これを使って Eloquent クラスの update メソッドや delete メソッドをオーバーライドしてあげれば良いです。 下記は、a_id と b_id という2つの複合キーを持つテーブルを扱う例です。

<?php
class Hoge extends Eloquent {
    ...
    public function update(array $params = array())
    {
        return DB::table($this->getTable())
            ->where('a_id', $this->attributes['a_id'])
            ->where('b_id', $this->attributes['b_id'])
            ->update($params);
    }
    public function delete()
    {
        return DB::table($this->getTable())
            ->where('a_id', $this->attributes['a_id'])
            ->where('b_id', $this->attributes['b_id'])
            ->delete();
    }
}

データの取得については下記のように。

$hoges = Hoge::whereRaw('a_id = ? and b_id = ?', array($a, $b))->get();