FuelPHPでmany_manyなリレーションを築く
has_oneとかとちょっと順準備が必要なのでめも。
公式
http://fuelphp.jp/docs/1.8/packages/orm/relations/many_many.html
バージョン情報
- FuelPHP 1.8
- PHP7.0.6
準備
「Model_Project」と「Model_User」を関連付ける
A user has many projects.
A project has many users.
なリレーションにするので多対多です。
Model_Project
リレーション情報をモデルクラスに追記。
関連付けるカラム名がFuelPHPの規則に従っていればカラム名の指定だけでできる。
protected static $_many_many = ['users'];
Model_User
同様
protected static $_many_many = ['projects'];
中間テーブルの作成
この作業だけsql文を手打ちしないといけない。びみょい
mysql -u my_name -my_password
use your_db_name;
CREATE TABLE IF NOT EXISTS `projects_users` (
`project_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`project_id`,`user_id`)
);
リレーションを築く
普通に追加する。既に構築済みのリレーションがあっても重複登録されないので便利。
$project = Model_Project::find(1);
$project->users[] = Model_User::find(1);
$project->save();
リレーションを破壊する
縁を切るときはnullを代入して保存。
$user = Model_User::find(1);
$user->project[0] = null;
// $user->project = null; # 全消し
$user->save();