2

シナリオは次のとおりです。

IssueとProjectの2つのテーブルがあります。

プロジェクトには多くのIssueを含めることができ、Issueには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)'),
    );
}

Issue Modelの場合、外部キーしかありません。

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)。

しかし、このケースは何らかの理由でオプションですか?

4

2 に答える 2

5

BELONGS_TOとHAS_ONEの違いを「外部キーはどこに保存されているか」と考えるのに役立ちますか?プロジェクトモデルに「Issue_Id」が保存されている場合、Issueには多くのプロジェクトが含まれる可能性があります。HAS_ONE関係を使用して、Issue COULDに多くのプロジェクトがある場合でも、1つしかないことを示します。

ただし、より一般的なケースは、Project_IdをIssueモデルに格納している場合です(そして、そうだと思います)。次に、BELONGS_TO関係を使用する必要があります。上記の関係を正しく定義したようです。

誰かがここでYiiリレーションに関連する同様の質問を投稿し、私が答えるのを手伝いました: yii-リレーションHAS_ONEを使用して関連テーブルからデータを取得し、リストページに表示します

関係を定義するための「必要性」についてのあなたの懸念に関しては、あなたは関係を定義するために「必要」ではありません。同じことを行うために独自のSQLクエリを作成することもできます。ActiveRecordリレーションは、関連するレコードのクエリを簡単にするための便利な機能です。課題のプロジェクトを検索する予定がない場合は、「プロジェクト」のBELONGS_TO関係を定義する必要はありません。

データベース構造を実際に確認しなくても、すべてが正しく設定されているように見えます。リレーショナルアクティブレコードの機能を最大限に活用して、$issue->projectと$project->issuesの両方を「レイジー」なリレーショナルクエリにすることができるようになりました。プロジェクトで乾杯と幸運を!

于 2010-08-28T16:43:26.860 に答える
1

Issueモデルには、プロジェクトモデルのBELONGS_TOとして指定されたリレーションがすでにあります。

新しいyii-bookも手に入れました。それは私を大いに助けました!

ハッピーコーディング:)

于 2010-08-28T16:37:18.757 に答える