@DenisDangerous

Как в yii2 в модели Active Record установить связь через 2 таблицы?

имеются следующие таблицы:

releases
authors
tracks
link_track_release(track_id, release_id)
link_track_author(track_id, author_id)

для релизов мне надо получить всех авторов. Как прописать связь в active_record?
С частным случаем все понятно:
public function getTracks()
    {
        return $this->hasMany(Tracks::className(), ['id' => 'track_id'])->viaTable('link_track_release', ['release_id' => 'id']);
    }

А вот как связь через 2 таблицы сделать, чтобы сразу добраться до авторов, я так и не понял...

Releases
<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "releases".
 *
 * @property string $id
 * @property string $code
 * @property string $name
 * @property string $extra
 * @property string $publishing_date
 * @property string $short_info
 * @property string $information
 * @property string $group_id
 * @property string $type_id
 * @property string $volume
 * @property string $part
 * @property string $copyright
 * @property string $is_active
 *
 * @property Catalog $catalog
 * @property LikesReleases[] $likesReleases
 * @property Users[] $users
 * @property LinkReleaseGenre[] $linkReleaseGenres
 * @property Genres[] $genres
 * @property LinkTrackRelease[] $linkTrackReleases
 * @property Tracks[] $tracks
 * @property ReleaseComments[] $releaseComments
 * @property ReleaseDownloads[] $releaseDownloads
 * @property Users[] $users0
 * @property ReleaseExtraData $releaseExtraData
 * @property ReleaseLinks[] $releaseLinks
 * @property ReleaseGroups $group
 * @property ReleaseTypes $type
 */
class Releases extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'releases';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['code', 'name', 'publishing_date', 'information'], 'required'],
            [['publishing_date'], 'safe'],
            [['information', 'is_active'], 'string'],
            [['group_id', 'type_id', 'volume', 'part'], 'integer'],
            [['code'], 'string', 'max' => 6],
            [['name', 'short_info'], 'string', 'max' => 256],
            [['extra'], 'string', 'max' => 50],
            [['copyright'], 'string', 'max' => 100],
            [['code'], 'unique'],
            [['group_id'], 'exist', 'skipOnError' => true, 'targetClass' => ReleaseGroups::className(), 'targetAttribute' => ['group_id' => 'id']],
            [['type_id'], 'exist', 'skipOnError' => true, 'targetClass' => ReleaseTypes::className(), 'targetAttribute' => ['type_id' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'code' => 'Code',
            'name' => 'Name',
            'extra' => 'Extra',
            'publishing_date' => 'Publishing Date',
            'short_info' => 'Short Info',
            'information' => 'Information',
            'group_id' => 'Group ID',
            'type_id' => 'Type ID',
            'volume' => 'Volume',
            'part' => 'Part',
            'copyright' => 'Copyright',
            'is_active' => 'Is Active',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getCatalog()
    {
        return $this->hasOne(Catalog::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getLikesReleases()
    {
        return $this->hasMany(LikesReleases::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUsers()
    {
        return $this->hasMany(Users::className(), ['id' => 'user_id'])->viaTable('likes_releases', ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getLinkReleaseGenres()
    {
        return $this->hasMany(LinkReleaseGenre::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getGenres()
    {
        return $this->hasMany(Genres::className(), ['id' => 'genre_id'])->viaTable('link_release_genre', ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getLinkTrackReleases()
    {
        return $this->hasMany(LinkTrackRelease::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getTracks()
    {
        return $this->hasMany(Tracks::className(), ['id' => 'track_id'])->viaTable('link_track_release', ['release_id' => 'id']);
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getReleaseComments()
    {
        return $this->hasMany(ReleaseComments::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getReleaseDownloads()
    {
        return $this->hasMany(ReleaseDownloads::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUsers0()
    {
        return $this->hasMany(Users::className(), ['id' => 'user_id'])->viaTable('release_downloads', ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getReleaseExtraData()
    {
        return $this->hasOne(ReleaseExtraData::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getReleaseLinks()
    {
        return $this->hasMany(ReleaseLinks::className(), ['release_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getGroup()
    {
        return $this->hasOne(ReleaseGroups::className(), ['id' => 'group_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getType()
    {
        return $this->hasOne(ReleaseTypes::className(), ['id' => 'type_id']);
    }
}

  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Max.Credit Санкт-Петербург
от 150 000 до 150 000 руб.
Willz Москва
от 150 000 руб.
Fmedia Санкт-Петербург
от 40 000 до 100 000 руб.
15 авг. 2018, в 07:40
120000 руб./в месяц
15 авг. 2018, в 07:34
98000 руб./в месяц
15 авг. 2018, в 07:30
100000 руб./в месяц