2016-01-12 160 views
2

假設我們有兩個實體:User和Post。在Yii2中創建一對多關係

在我的理解,纔能有用戶和郵政之間存在一個一對多的關係,你需要做到以下幾點:

class User { 

... 

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

} 

class Post { 

... 

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

} 

這是正確的?爲了使一切正常工作,還有什麼我需要添加的? Yii2文檔對我來說不是很清楚。

+0

請更具體。什麼不可行?或者你在做什麼?代碼看起來是正確的,如果你想和Order模型建立關係,但是我想你想在Post和User類之間做它們,這是正確的嗎? –

回答

4

是的,這就夠了(除非你插入Order類名來代替),但是它也建議加入PHPDoc的對關係:

User型號:

/** 
* ... 
* 
* @property Post[] $posts 
*/ 
class User 
{ 
    return $this->hasMany(Post::className(), ['user_id' => 'id']); 
} 

Post型號:

/** 
* ... 
* 
* @property User $user 
*/ 
class Post 
{ 
    return $this->hasOne(User::className(), ['id' => 'user_id']); 
} 

然後當您撥打$user->posts$post->user時,您將獲得完整的自動填充如果你使用的是IDE。這也很有用,因爲只需查看文件頂部即可看到關係列表,因爲作爲虛擬屬性訪問的關係,$user->getPosts()調用將返回yii\db\ActiveQuery對象而不是\yii\db\ActiveRecord數組。最好使用linebreak將它們與模型屬性分開(它們也會添加用於自動完成,並在不查看數據庫的情況下查看相應數據庫表的結構)。順便說一句,如果你用Gii生成模型,如果你正確指定了外鍵,關係和PHPDoc將自動生成。

請注意,如果您不需要使用$post->user,則可以在Post模型中省略user關係聲明。您可以聲明僅用於需要的關係。