2017-10-03 1 views
2

私は、例えば2つのエンティティ:UserPostを持っています。yii2-userとの関係を作成するにはどうしたらいいですか?

私はOneToMany関係(1人のユーザーには多数の投稿があります)を持ちたいと思いますが、その方法はわかりません。私はyii2ユーザモジュールを使用して認証、登録などを行ってきましたが、うまくいきましたが、今私はどのように関係を作成するのか疑問に直面しました。

私はPostモデルであることを作成しました:

public function getUser() 
    { 
     return $this->hasOne(User::className(),['id' => 'user_id']); 
    } 

を今私は$user->getPosts()のように、ユーザーからの投稿を取得することはできません。

+0

あなたのユーザーの投稿を取得するuldはあなたに関連したポストを得るためにユーザーモデル広告のrealtion one to manyを拡張します.. – scaisEdge

答えて

1

を使用して、すべての記事を取得 第三者の拡張機能に基づいてモデルを保存したい場合は、プロパティクラスを使用して基本クラスを拡張し、必要なすべてのメソッドを追加することに基づいています。

class MyUser extends User 
{ 
    public function getPost() { 
    return $this->hasMany(Post::className(), ['user_id' => 'id']); 

    } 
.... 

と、あなたはこの書くことができ、ユーザのモデルでは

$myUserModel= MyUser::findOne($id)->with('posts'); 

$myUsermModel->post; 

http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data

+0

私は作成方法を知っています単純な関係ですが、私はyii2ユーザー拡張を使用しました。そして私はそれをどう扱うことができますか? – Rosti

+0

一般的なプラクティスは、ユーザー拡張機能から作成した拡張クラスに基づいており、必要な新しいメソッドをすべて追加します。必要なときに拡張クラスを参照する必要があります。これがクリアであることを希望します。 – scaisEdge

+0

回答更新.. – scaisEdge

2

各ユーザーの$モデルの

public function getPosts() 
{ 
    return $this->hasMany(Post::className(),['user_id' => 'id']); 
} 

その後、ユーザーモデルでは、多くの関係に1を追加し、あなたがhasManyの関係を追加する必要があり、あなたのUserモデルに

$posts = $model->posts; 
+0

私は単純な関係を作成する方法を知っていますが、私はyii2ユーザー拡張を使用しました。そして私はそれをどう扱うことができますか? – Rosti

+0

リレーションはモデルによって表される2つのテーブルの間にあります。それぞれのモデルでこれらの関係を定義し、うまく動作するはずです。あなたの拡張子のユーザモデルとポストモデル – Kalu

+0

あなたがアクティブなレコード '$ posts = Post :: findAllByAttributes(['user_id' => $ id])を使うことができないようにしたい場合は – Kalu

1

を参照することができます。

public function getPosts() 
{ 
     return $this->hasMany(Post::className(),['user_id' => 'id']); 
} 

をそして、あなたが得るこのような記事:

$model = User::findOne($id)->with('posts'); 
+0

私は単純な関係を作成する方法を知っていますが、私はyii2ユーザー拡張を使用しました。そして私はそれをどう扱うことができますか? – Rosti

関連する問題