kAsper
kAsper

Reputation: 1

Yii2 Search Model joinWith has no relation named

Error: admin\models\DormitoryFloorModel has no relation named "dormitory_model".

I use postgresql db.

Controller action:

public function actionIndex() {
    $searchModel = new DormitoryFloorModelSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

DormitoryFloorModel:

public static function tableName()
{
    return 'dormitory_floor_model';
}

public static function getDb()
{
    return Yii::$app->get('dormitory');
}

public function getDormitoryModel()
{
    return $this->hasOne(DormitoryModel::className(), ['id' => 'model_id']);
}

DormitoryModel:

public static function tableName()
{
    return 'dormitory_model';
}

public static function getDb()
{
    return Yii::$app->get('dormitory');
}

public function getDormitoryFloorModels()
{
    return $this->hasMany(DormitoryFloorModel::className(), ['model_id' => 'id']);
}

Trying to joinWith in DormitoryFloorModelSearch:

$query = DormitoryFloorModel::find();
$query->joinWith(DormitoryModel::tableName());

I would be extremely grateful for your help.

UPD: Tried to use table definition in model without pgsql schema, but it doesn't work.

Example:

'dormitory' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'pgsql:host=localhost;port=5432;dbname=postgres',
        'username' => 'username',
        'password' => 'password',
        'charset' => 'utf8',
        'schemaMap' => [
            'pgsql'=> [
                'class'=>'yii\db\pgsql\Schema',
                'defaultSchema' => 'dormitories_usage'
            ]
        ],
    ],

So I've changed to:

public static function tableName()
{
    return 'dormitories_usage.dormitory_floor_model';
}

both models.

Upvotes: 0

Views: 33

Answers (0)

Related Questions