2015-06-09 164 views
1
$model = Item::find() 
->select('group_concat(item.ID) AS ItemID') 
->joinWith('image', true, 'LEFT JOIN') 
->where('item.user_id = :id', [':id' => Yii::$app->user->identity->ID]) 
->all(); 

你看,如果我不喜歡這一點,將打印我的itemid的字符串,以逗號分隔 145元,但如果有3000K記錄數據庫, 所以它會輸出我只有一半。PHP YII2設置會話group_concat_max_len

問題是,是否可以在Yii2框架中設置會話group_concat_max_len的 ?

回答

1

可以使用Yii::$app->db應用程序的database connection對象訪問。然後,你可以調用find之前設置你的MySQL變量:

Yii::$app->db->createCommand('SET group_concat_max_len = $length')->execute(); 
$model = Item::find() 
... 

爲了保持一致性,你可以設置你group_concat_max_len在你的配置文件中的Yii參數,使其訪問的應用範圍。

'params' => [ 
    ... 
    'group_concat_max_len' => 50000, 
] 

然後,您可以撥打以上使用

Yii::$app->db->createCommand(
    'SET group_concat_max_len = :length', [ 
     ':length' => Yii::$app->params['group_concat_max_len'] 
    ] 
)->execute(); 
+0

THX,真的沒有想到這個 –

1

您可以使用Yii2框架執行任意查詢。

使用這樣的事情對於您的問題:

// open connection to the DB 
$connection = new \yii\db\Connection([ 
    'dsn' => $dsn, 
    'username' => $username, 
    'password' => $password, 
]); 
$connection->open(); 

// Update the MySQL config 
$sql = 'SET group_concat_max_len = 50000;'; 
$connection->createCommand($sql)->execute(); 

請注意,如果您選擇響應的長度大於50000(在我的例子中,DB答案仍然被截斷,選擇,最好的價值爲你)。

請注意,返回值的有效最大長度受到MySQL服務器的max_allowed_pa​​cket值限制。

更多關於這個MySQL的配置在這裏:http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat

0

如果你已經使用ActiveDataProvider查詢,請嘗試以下代碼:

$dataProvider = new ActiveDataProvider([ 
     'query' => $query, 



    ]); 
    $dataProvider->db->createCommand('SET group_concat_max_len = 1024*4')->execute();