i had db post table, content table, , space table.
a post type of content, , space container many posts. want posts within space.
post:
id object_id -------------- 1 22 content (object_id --> post.id):
id space_id ------------------------ 22 3 space (id --> content.space_id):
id -------------- 3 to posts within space, controller function looked this:
$posts = post::find() ->joinwith('content', false) ->where(['{{content}}.space_id' => $space_id]) ->all(); and post model had function content object post:
public function getcontent() { return $this->hasone(content::classname(), ['object_id' => 'id'])->andoncondition(['{{content}}.object_model' => 'humhub\modules\post\models\post']); } this worked until database schema changed.
now there no longer space_id column in content table. instead, there new table contentcontainer pk field replaces space_id, , class field (i.e. space class) identify pk space( there class in table).
the tables/relationships now:
post table:
id object_id -------------- 1 22 content table (object_id --> post.id):
id contentcontainer_id ------------------------ 22 5 contentcontainer table (id --> content.contentcontainer_id)
id pk class --------------- 5 3 //space space (id --> contentcontainer):
id -------------- 3 to posts within space, have link 3 tables: post,content,contentcontainer.
do add contentcontainer relationship post model? or modify content model relationship in post model? not sure how best tackle without writing big sloppy query.
i changed controller function this:
$posts = post::find() ->where(['{{contentcontainer}}.pk' => $space_id]) ->andwhere(['{{contentcontainer}}.class' => 'humhub\modules\space\models\space']) not sure right , stuck setting contentcontainer relationship in post model.
seems have junction table - contentcontainer. there example in official yii2 docs how decalre relation via junction table.
in case relation in post model this:
public function getitems() { return $this->hasmany(content::classname(), ['id' => 'pk']) ->viatable('contentcontainer', ['class' => 'space_id']); } now controller function $posts doing 2 joins insead of one.
Comments
Post a Comment