我有一個帶有發佈表,內容表和空間表的數據庫。Yii2查詢空間中的帖子
帖子是一種內容,空間是許多帖子的容器。我想獲得一個空間內的所有職位。
帖子:
id object_id
--------------
1 22
內容(OBJECT_ID - > post.id):
id space_id
------------------------
22 3
空間(ID - > content.space_id):
id
--------------
3
要在一個空間內獲得帖子,控制器功能如下所示:
$posts = Post::find()
->joinWith('content', false)
->where(['{{content}}.space_id' => $space_id])
->all();
和後模型具有此功能來獲取內容對象後:
public function getContent() {
return $this->hasOne(Content::className(), ['object_id' => 'id'])->andOnCondition(['{{content}}.object_model' => 'humhub\modules\post\models\Post']);
}
這完美地工作,直到數據庫架構改變。
現在內容表中不再有space_id
列。取而代之的是,新表contentcontainer
具有替換space_id的pk
字段和012xx字段(即space
類)以標識PK是用於空間(表中還有class
)。
表/關係現在是:
後表:
id object_id
--------------
1 22
內容表(的object_id - > post.id):
id contentcontainer_id
------------------------
22 5
Contentcontainer表(ID - > content.contentcontainer_id)
id pk class
---------------
5 3 //Space
空間(ID - > contentcontainer):
id
--------------
3
爲了得到一個空間內的所有帖子,我現在有鏈接3個表:文章,內容contentcontainer。
是否將contentcontainer關係添加到Post模型?或者修改Post模型中的內容模型關係?不知道如何寫出最好的解決方案,而不需要寫出大量的草率查詢。
我改變了控制器的功能是:
$posts = Post::find()
->where(['{{contentcontainer}}.pk' => $space_id])
->andWhere(['{{contentcontainer}}.class' => 'humhub\modules\space\models\Space'])
不知道這是正確的,我堅持設置在Post
模型contentcontainer
關係。
請,張貼3表結構 – gmc
@gmc表結構添加 – lilbiscuit