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();