ARモデルの関係関数、多くの人から1つの関係
-
01-10-2019 - |
質問
これがシナリオです:
私は2つのテーブル、Issue&Projectを持っています。
プロジェクトには多くの問題があり、問題はまさに1つのプロジェクトを可能にします。
問題は多いので、それを定義する必要がありますか?
プロジェクトモデルで知っている原因私が持っています:
public function relations()
{
return array(
'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
'users' => array(self::MANY_MANY, 'User', 'tbl_project_user_assignment(project_id, user_id)'),
);
}
問題モデルの場合、私は外国の鍵以外は何もありません:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'requester' => array(self::BELONGS_TO, 'User', 'requester_id'),
'owner' => array(self::BELONGS_TO, 'User', 'owner_id'),
'project' => array(self::BELONGS_TO, 'Project', 'project_id'),
);
}
私は1つの関係に何かを定義する必要がないと思いますか?
前もって感謝します。
ところで、私はアジャイルYiiの本をやっていて、私はこの質問を自問することになりました。 ARクラスにはHas-Oneオプションがあります(http://www.yiiframework.com/doc/guide/database.arr).
しかし、このケースは何らかの理由でオプションですか?
解決
belbings_toとhas_oneの違いを「外部キーはどこに保存されているのか」と考えるのに役立ちますか?プロジェクトモデルが「rsuce_id」を保存している場合、潜在的に問題には多くのプロジェクトがある可能性があります。 HAS_ONE関係を使用して、問題に多くのプロジェクトがある場合でも、1つしかないと述べています。
ただし、より一般的なケースは、Project_idを問題モデルに保存している場合です(そして、私はあなたがいると思います)。その後、belnings_to関係を使用する必要があります。 上記の関係を正しく定義したようです。
誰かが私が答えるのを手伝ったYii関係に関する同様の質問を投稿しました:YII -LALITION HAS_ONEを使用して、リストページに表示するために関連テーブルからデータを取得する
関係を定義するために「必要」についてのあなたの懸念に関しては、「必要」しないでください。同じことをするために独自のSQLクエリを書くことができます。 ActivereCord関係は、関連するレコードのクエリをより簡単にするための便利なものです。問題のプロジェクトを検索することは決してない場合は、「プロジェクト」にbelonds_to関係を定義するために「必要」ではありません。
実際にあなたのデータベース構造を見ることなく、それはあなたがすべてを正しくセットアップしているように私に見えます。これで、リレーショナルアクティブレコードのパワーを最大限に活用して、$ secss-> project-> project-> subessの両方を簡単に作成できるようになりました。プロジェクトで乾杯と頑張ってください!
他のヒント
問題モデルでは、プロジェクトモデルにBONDSS_として指定されている関係が既にあります。
また、新しいYii-Bookも手に入れました。それは私をとても助けてくれました!
ハッピーコーディング:)