2014-11-06 65 views
1

我試圖對3個表進行檢查,我將它們連接在一起。我不想使用硬編碼的真實表名,因爲我的項目高度發展,表前綴可能會改變。 Yii2中從3表中選擇哪裏有我在聯接表上的where語句選擇的最佳方式是什麼? 我可以從下面的代碼中得到我想要的。但正如我所說的,我不想使用硬編碼的表別名。任何想法如何解決這個或其他想法的建議將非常感激。DB在Yii2中使用別名從多個表中選擇

$userId = Yii::$app->user->id; 
    $result = \app\models\UserPermission::find()->joinWith([ 
     'permission', 
     'permission.service' 
    ])->where([ 
     'prefix_user_permission.user_id' => $userId, 
     'prefix_permission.flag' => Permission::LOGIN, 
     'prefix_service.login_available' => Service::LOGIN_AVAIABLE, 
    ])->all(); 

我想與此查詢落得:

SELECT * 
    FROM `prefix_user_permission` `up` 
    INNER JOIN `prefix_permission` `p` ON `up`.`permission_id` = `p`.`id` 
    INNER JOIN `prefix_service` `s` ON `p`.`service_id` = `s`.`id` 
    WHERE (`up`.`user_id`=43) 
    AND (`p`.`flag`='LOGIN') 
    AND (`s`.`login_available`=1); 

回答

0

表前綴可以使用「tablePrefix」 PARAM與主分貝配置沿如下進行配置:

'components' => [ 
    'db' => [ 
     //other db config params 
     'tablePrefix' => 'pre_' 
    ] 

該前綴可以使用如下:

T下面是此語法的特定表名特殊的變種:{{%Y}}自動將應用程序的表前綴所提供的價值,如果一個表前綴已定:

$sql = "SELECT COUNT([[$column]]) FROM {{%table}}"; 
$rowCount = $connection->createCommand($sql)->queryScalar(); 

或者,如果你正在使用主動記錄模型,那麼你也可以使用tableName()函數來替換硬編碼的表名。