За последние 24 часа нас посетили 10486 программистов и 690 роботов. Сейчас ищут 372 программиста ...

Преобразовать данные в запросе в нормальный массив

Тема в разделе "Yii", создана пользователем rybak94, 5 дек 2016.

  1. rybak94

    rybak94 Новичок

    С нами с:
    28 ноя 2016
    Сообщения:
    5
    Симпатии:
    1
    Добрый день, уважаемые форумчане. У меня появилась проблема и хотел бы попросить у вас совета. На самом деле, даже не знаю, где искать. В программировании я недавно, так что если поставил вопрос не правильно -направьте меня)

    Имеется такой запрос:

    Код (Text):
    1. select conversion.*,  GROUP_CONCAT( concat_ws("=",macros.token_key, macros.token_value) SEPARATOR '&') as pb_macros, pb_method, pb_url from conversion left join offer on offer_id = offer.id left join macros on macros.offer_id = offer.id  left join advertiser on advertiser.id = offer.advertiser_id where status = "checking" group by conversion.id;
    И если получать результат в Navicat, то выводит вполне хороший результат:

    upload_2016-12-5_11-11-18.png

    Но мне требуется вывести данные из этого запроса в yii2, для того, чтобы в дальнейшем работать с этими данными.
    Запрос в yii2 следующий:

    PHP:
    1. public function getQuery(){
    2.  
    3.         $conversion = Yii::$app->db->createCommand
    4.         ('SELECT conversion.*, GROUP_CONCAT(
    5.        CONCAT_WS("=", macros.token_key, macros.token_value) SEPARATOR '&')
    6.        AS pb_macros, pb_method, pb_url from conversion
    7.        LEFT JOIN offer ON offer_id = offer.id
    8.        LEFT JOIN macros ON macros.offer_id = offer.id
    9.        LEFT JOIN advertiser ON advertiser.id = offer.advertiser_id
    10.        WHERE status = "checking" GROUP BY conversion.id');
    11.  
    12.         print_r($conversion);
    13.     }
    Ну и вызываю в контроллере в действии action.
    Результат не очень радует глаз, и понимаю, что его нужно как-то преобразовать в нормальный, читабельный вид.

    Вот результат:

    Код (Text):
    1. yii\db\Command Object ( [db] => yii\db\Connection Object ( [dsn] => mysql:host=localhost;dbname=tracker_db [username] => maxprofit [password] => UsW%{4p:4GZ.h-B? [attributes] => [pdo] => [enableSchemaCache] => [schemaCacheDuration] => 3600 [schemaCacheExclude] => Array ( ) [schemaCache] => cache [enableQueryCache] => 1 [queryCacheDuration] => 3600 [queryCache] => cache [charset] => utf8 [emulatePrepare] => [tablePrefix] => [schemaMap] => Array ( [pgsql] => yii\db\pgsql\Schema [mysqli] => yii\db\mysql\Schema [mysql] => yii\db\mysql\Schema [sqlite] => yii\db\sqlite\Schema [sqlite2] => yii\db\sqlite\Schema [sqlsrv] => yii\db\mssql\Schema [oci] => yii\db\oci\Schema [mssql] => yii\db\mssql\Schema [dblib] => yii\db\mssql\Schema [cubrid] => yii\db\cubrid\Schema ) [pdoClass] => [commandClass] => yii\db\Command [enableSavepoint] => 1 [serverStatusCache] => cache [serverRetryInterval] => 600 [enableSlaves] => 1 [slaves] => Array ( ) [slaveConfig] => Array ( ) [masters] => Array ( ) [masterConfig] => Array ( ) [_transaction:yii\db\Connection:private] => [_schema:yii\db\Connection:private] => [_driverName:yii\db\Connection:private] => [_slave:yii\db\Connection:private] => [_queryCacheInfo:yii\db\Connection:private] => Array ( ) [_events:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => ) [pdoStatement] => [fetchMode] => 2 [params] => Array ( ) [queryCacheDuration] => [queryCacheDependency] => [_pendingParams:yii\db\Command:private] => Array ( ) [_sql:yii\db\Command:private] => @A p`Ol " CP@_AED@AD( BOLADNVA ")", LADDJEI m`b`b D kdfErAhd ) CD@AR@D [_refreshTableName:yii\db\Command:private] => [_events:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => )
    Хотелось, если возможно его в active record перевести, просто тут я даже не представляю как функции вставлять туда.
    Спасибо!
     
  2. rybak94

    rybak94 Новичок

    С нами с:
    28 ноя 2016
    Сообщения:
    5
    Симпатии:
    1
    Построил по-другому запрос, вроде через active record
    PHP:
    1. $conversions = new Conversion;
    2.         $conversions = Conversion::find()->select(['conversion.*', "GROUP_CONCAT(
    3.            CONCAT_WS('=', macros.token_key, macros.token_value) SEPARATOR '&')
    4.            AS pb_macros, pb_method, pb_url"])->from('conversion')
    5.             ->leftJoin('offer', '`conversion`.`offer_id` = `offer`.`id`')
    6.             ->leftJoin('macros', '`macros`.`offer_id` = `offer`.`id`')
    7.             ->leftJoin('advertiser', '`offer`.`advertiser_id` = `advertiser`.`id`')
    8.             ->where(['conversion.status' => "checking"])->all();
    9.  
    10. print_r($conversions);
    Данные, которые мне нужны, то есть pb_macros, pb_method, pb_url в таком же виде, остальное норм)

    Код (Text):
    1. Array ( [0] => app\models\Conversion Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 20 [offer_id] => 1 [click_id] => 1 [partner_id] => 0 [lead_id] => 333 [lead_country] => de [lead_landing] => de1.mybigsizer.com [user_ip] => ::1 [user_country] => [date_lead] => 0000-00-00 00:00:00 [status] => checking [response_s2s] => [lead_sub1] => [lead_sub2] => qsdqsd [lead_sub3] => 0 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 20 [offer_id] => 1 [click_id] => 1 [partner_id] => 0 [lead_id] => 333 [lead_country] => de [lead_landing] => de1.mybigsizer.com [user_ip] => ::1 [user_country] => [date_lead] => 0000-00-00 00:00:00 [status] => checking [response_s2s] => [lead_sub1] => [lead_sub2] => qsdqsd [lead_sub3] => 0 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) )
    Как получить данные, содержащиеся здесь

    [_related:yii\db\BaseActiveRecord:private]
    --- Добавлено ---
    Решил вопрос, спасибо, надо было добавить asArray()->all()
    Всем хорошего дня)
     
    denis01 нравится это.