Exibição de dados usando uma tabela pivot não é exibida na grid.

84 views
Skip to first unread message

Cálcio

unread,
Sep 8, 2016, 3:49:43 PM9/8/16
to YFB - Yii Framework Brasil
Boa tarde galera.

Preciso exibir dados que tem relacionamento com uma tabela pivot (N x M) na minha grid GridView::widget([]) na view index.php e não consigo de jeito nenhum. Estou a um bom tempo apanhando com isso, e como sei q sou bem retardado, criei as msm tabelas no exemplo da doc do Yii com os possíveis campos e fazendo a amarração na tabela pivot.


Criei os tabelas e models order, item e order_item como na doc os relacionamento ficou da seguinte maneira

// MANUAL
class
Order extends ActiveRecord
{
   
public function getOrderItems()
   
{
       
return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
   
}

   
public function getItems()
   
{
       
return $this->hasMany(Item::className(), ['id' => 'item_id'])
           
->via(
'orderItems');
   
}
}

//MEU MODEL
class Order extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'order';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name'], 'required'],
            [['name'], 'string', 'max' => 80],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
        ];
    }

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

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->via('orderItems');
    }
}

Porém na view index.php de Order na grid GridView::widget([]) não consigo de jeito nenhum trazer o(s) item(s) relacionados ao order. 
Abaixo segue a view
<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            // ['class' => 'yii\grid\SerialColumn'],
            //
            // 'id',
            [
                'label' => 'Item',
                'attribute' => 'item_id',
                'value' => 'items.item'
            ],
            'name',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

Na coluna Item, deveria vir o item q está relacionado com Order da tabela order_item (tabela pivot).

Ou seja nem fazendo igual ao manual isso funciona.

Alguém consegue me dar uma luz nisso?

Eric

unread,
Sep 8, 2016, 3:52:37 PM9/8/16
to yii-framew...@googlegroups.com
Fala Cálcio,

Dá erro ou simplesmente não mostra nada??

E o SQL gerado no final? qual é?

Uma tabela assim, você não tinha que fazer a query ao contrário? partindo dos items? (Se é q eu entendi bem o relacionamento)

Eric Maicon - ericmaicon.com.br


--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/yii-framework-brasil/44c7b47e-d34c-43bb-a54e-8de08650e2a7%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Cálcio

unread,
Sep 8, 2016, 4:03:51 PM9/8/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
E aí Eric blz?
Cara simplesmente exibe (not set) na coluna. 

Plinio Pavin

unread,
Sep 9, 2016, 6:37:08 AM9/9/16
to yii-framew...@googlegroups.com
Cálcio, certeza que na tabela item existe uma coluna chamada "item" ?

O correto não seria: 'value' => 'items.item_id' ?


Plinio Cesar Pavin
Arquiteto de Sistemas
Telefone: +55 (19) 99809-5744
http://www.pavin.net
Campinas/SP

Em 8 de setembro de 2016 16:49, Cálcio <calc...@gmail.com> escreveu:
--

Cálcio

unread,
Sep 9, 2016, 6:54:53 AM9/9/16
to YFB - Yii Framework Brasil
Dia...

Então @Plinio os campos realmente existem. Como citado criei as msm tabelas e campos que o próprio exemplo da doc usa. Criei tb a coluna item para nomear um item.

Eu sei q se eu criasse uma relação 1 x N, no modelo funciona o 'value' => 'nomeRelação.campo', sei tb que se tivesse com sei lá 5 tabelas relacionadas linearmente ou cascata (nao sei o termo certo para isso) sei que funciona  'value' => 'nomeRelação1.nomeRelação2.nomeRelação3.nomeRelação4.nomeRelação4.campo', agora no N x M nem a forma do exemplo da certo. Já tentei várias combinações e nada.

Sei lá está mt bizarro isso. O exemplo na doc é mt meia boca. Mt incompleto.


Eric

unread,
Sep 9, 2016, 8:16:44 AM9/9/16
to yii-framew...@googlegroups.com
Então, o lance é que eu ACHO que não tem como acessar uma relação desse jeito, porque items vai ser um array. 

Por isso, na primeira resposta, sugeri fazer o contrário, a query do Item. Pois assim você acessa facilmente a outra relação.

O que você pode fazer é usar a function no values e pegar o primeiro array do items e mostrar:

'value' => function ($model) {
    $item = $model->items[0];
    return $item->title;
}

Eric Maicon - ericmaicon.com.br


--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Sep 9, 2016, 8:34:53 AM9/9/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
Valeu Eric.

Isso resolveu o problema da exibição. Porém Orders que possuem 2 ou mais items relacionados só mostra o primeiro item.
Eu já tinha visto um lugar que mostrava como separar esses itens por virgula, mas não estou achando. Se tiver algum exemplo aí e puder passar enquanto estou procurando de novo eu agradeço.

[]'s

Eric

unread,
Sep 9, 2016, 8:39:28 AM9/9/16
to yii-framew...@googlegroups.com
O melhor jeito é na query, algo do tipo:

Crie o campo:

public $nome_dos_itens;

Mexa no rules:
public function rules ()
{
     [['nome_dos_itens'], 'safe']
}

finalmente na query:
$query->select([
    '*',
    'nome_dos_itens' => 'select group_concat(title) from item where item.id = projeto.item_id'
]);

Com isso o próprio mysql vai criar dentro do SQL os itens separados por vírgula, sem o custo de fazer no PHP. NA grid só colocar 'nome_dos_itens' e já era, vai mostrar.

A outra forma é com implode ou fazendo um for e concatenando.



Eric Maicon - ericmaicon.com.br


--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Sep 9, 2016, 8:48:31 AM9/9/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
Valeu vou tentar aqui.

[]'s

Cálcio

unread,
Sep 9, 2016, 1:39:25 PM9/9/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
Fala aí Eric. Fiz como falou + com algumas adaptações...

Em Order fiz adicionei o campo novo e nas rules tb e com o safe. No OrderSearch que fiz $query->select com ajuda do Join e tive q colocar a consulta que sugeriu entre parenteses.

$query->select([
           
'*',
           
'itemName' => '(SELECT GROUP_CONCAT(item SEPARATOR ",") FROM item WHERE item.id = order_item.item_id)'
       
]);


        $query
->innerJoin('order_item', 'order_item.order_id = order.id');

Até aqui blz. Porém na grid não roda direito. Na contagem mostra 5 de 7 itens exibidos. Deveria mostrar 7 itens ou os 5 com os itens separados por virgula.

Tem alguma ideia do que pode está ocorrendo?

Eric

unread,
Sep 9, 2016, 1:43:33 PM9/9/16
to yii-framew...@googlegroups.com
Não cara. 

Pega o SQL criado (no debug toolbar ou printando a query: $query->createCommand()->rawSql) e verifica se tá certo no banco. Eu acho que o erro pode estar aí!!

Se estiver tudo ok, veja no dataProvider->allModels se o itemName foi preenchido corretamente (se não cortou nada). 

Só depois eu suspeitaria do GridView.

Eric Maicon - ericmaicon.com.br


--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Sep 9, 2016, 2:24:53 PM9/9/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
Na query que rodei no Mysql ele exibe 7 linhas e não faz a separação por virgula dos itens

Plinio Pavin

unread,
Sep 9, 2016, 5:16:52 PM9/9/16
to yii-framew...@googlegroups.com
Cálcio, para usar a função group_concat() acho que a query precisa ter uma cláusula GROUP BY



Plinio Cesar Pavin
Arquiteto de Sistemas
Telefone: +55 (19) 99809-5744
http://www.pavin.net
Campinas/SP

Em 9 de setembro de 2016 15:24, Cálcio <calc...@gmail.com> escreveu:
Na query que rodei no Mysql ele exibe 7 linhas e não faz a separação por virgula dos itens

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Newerton Vargas de Araújo

unread,
Sep 9, 2016, 11:47:24 PM9/9/16
to YFB - Yii Framework Brasil, er...@ericmaicon.com.br
Cálcio,

Pegando o exemplo do Eric, faz deste modo assim:

'value' => function($data){
    $items = ArrayHelper::map($data->items, 'id', 'name'); //name or title
    echo Inflector::sentence($items, ' e ');
}

Cálcio

unread,
Sep 12, 2016, 8:05:12 AM9/12/16
to YFB - Yii Framework Brasil
Dia povo.
Parabéns para "nozes" Dia do programador....

Estou tão P por não resolver a parada q me confundi todo. Nesse meu caso de exibir um processo, eu preciso exibir uma única área referente aquele processo (eu só precisaria exibir várias áreas na tela de Macroprocessos).

A minha consulta pelo mysql traz o q eu preciso, mas na grid mostra ela capada, como citei em algum post acima.
Vou primeiro arrumar a cagada q fiz pq parou de funcionar tudo, depois, volto nesse ponto. Qualquer coisa posto aqui.

Cálcio

unread,
Sep 12, 2016, 10:07:28 AM9/12/16
to YFB - Yii Framework Brasil
Minha consulta precisa parecer com isso.

SELECT a.id, a.processo, b.id, b.macroprocesso, c.area_id, d.id, d.nome
FROM Processo a, Macroprocesso b, Macroprocesso_Area c, Area d
WHERE a.macroprocesso_id = b.id
AND b.id = c.macroprocesso_id
AND c.area_id = d.id
LIMIT 0 , 30


A query do meu processoSearch está da forma que preciso

SELECT  `Area`.`sigla` ,  `Processo`.`id` ,  `Processo`.`processo` ,  `Processo`.`macroprocesso_id`
FROM  `Processo`
LEFT  JOIN  `Macroprocesso`  ON  `Processo`.`macroprocesso_id`  =  `Macroprocesso`.`id`
INNER  JOIN  `Macroprocesso_Area`  ON Macroprocesso_Area.macroprocesso_id = Macroprocesso.id
INNER  JOIN  `Area`  ON Area.id = Macroprocesso_Area.area_id
LIMIT 20


Com isso a consulta retorna os campos que preciso, os campos pesquisa tb funcionam. Só não consigo exibir o maldito nome. Pela logica deveria ser como faço normalmente, quando quero acessar relacionamento de relacionamento de relacionamento (algo como  'value' => 'nomeRelação1.nomeRelação2.nomeRelação3.nomeRelação4.nomeRelação4.campo'macroprocessoArea.area.nome por exemplo.

Está mt confuso isso para mim.

Cálcio

unread,
Oct 6, 2016, 10:30:26 AM10/6/16
to YFB - Yii Framework Brasil
Ressuscitando o defunto...

Ainda estou nessa luta de tentar exibir um campo no GridView::widget() que está relacionado a uma tabela Pivot. Não exibe de jeito nenhum o nome.

minhas relations estão usando o via() nos models.

processo.php (model) - Esse é o modelo que faz a listagem
public function getMacroprocessoAreas()
    {
        return $this->hasMany(MacroprocessoArea::className(), ['MACROPROCESSO_ID' => 'ID'])->via('macroprocesso');
    }

    public function getMacroprocesso()
    {
        return $this->hasOne(Macroprocesso::className(), ['ID' => 'MACROPROCESSO_ID']);
    }

Até onde entendi nesse treco, ao chamar a relação no GridView::widget() deveria extender todas as relações, ou seja, deveria conseguir chamar todos os campos de MacroprocessoArea qnd tb de Macroprocesso. Ex.:
'value' => 'macroprocessoAreas.AREA_ID',


Eu deveria ver o valor de AREA_ID desse cara, ou poderia tb pegar o valor ID da tabela Macroprocesso, por estar relacionada pelo via() no relation

Em ambos os casos não exibe nenhum dado.
O msm acontece se eu tentar me referenciar pela relation direta em macroprocesso.

O bizarro é, que se rodo a consulta gerado pelo console log traz todos os dados que preciso, se uso os campos de pesquisa nessa coluna q ñ exibe nada ele filtra certinho. Ou seja isso só constata que a consulta em si está funcionando e os filtros tb.

Evandro Sviercowski

unread,
Oct 6, 2016, 10:58:51 AM10/6/16
to yii-framew...@googlegroups.com
Bom dia, 

Se você carregar o model (sem ser em um grid) e acessar a relation ela esta funcionando?

Tem como postar o modelo de banco de dados dessas tabelas?

Como esta o código da função que retorna o DataProvider?


Evandro Sviercowski

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 6, 2016, 11:10:10 AM10/6/16
to YFB - Yii Framework Brasil
Se você carregar o model (sem ser em um grid) e acessar a relation ela esta funcionando?
Não sei te responder, mas oq afirmo é, a consulta que é gerada pela minha query e que é mostrada no console log (debug bar) tra todas as colunas que preciso. Ou seja, eu executo ela direto no banco e roda sem erros e todos os dados.

Como esta o código da função que retorna o DataProvider?
As consultas estão direto no modelSearch no método search.
public function search($params)
    {
        $query = Processo::find();
                
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        
        $dataProvider->setSort([
            'defaultOrder' => [
                'AREA_ID' => SORT_ASC,
                'MACROPROCESSO_ID' => SORT_ASC,
                'PROCESSO' => SORT_ASC,
            ],
            'attributes' => [
                'AREA_ID' => [
                    'asc' => ['SIGLA' => SORT_ASC],
                    'desc' => ['SIGLA' => SORT_DESC],
                    'default' => SORT_ASC,
                ],
                'MACROPROCESSO_ID' => [
                    'asc' => ['MACROPROCESSO' => SORT_ASC],
                    'desc' => ['MACROPROCESSO' => SORT_DESC],
                ],
                'PROCESSO'
            ],
        ]);

        $this->load($params);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            return $dataProvider;
        }
        
       $query->select("AUT.AUT_SETORES.SIGLA, SGR_PROCESSO.ID, SGR_PROCESSO.PROCESSO, SGR_PROCESSO.MACROPROCESSO_ID");
        
        /**
         * Jaz um join com o relacionamento que exite no model.
         * Dessa forma traz somente o(s) campo(s) que interessam na query
         * Caso queira trazer tudo basta usar 
         * $query->joinWith('nomeDoRelacionamento')
         */
        $query->joinWith('macroprocessoAreas');
        $query->innerJoin('AUT.AUT_SETORES', 'AUT.AUT_SETORES.ID = SGR_MACROPROCESSO_AREA.AREA_ID');
        
        $query->andFilterWhere([
            'ID' => $this->ID,
            //A chave estrangeira precisa ser retirada
            //'MACROPROCESSO_ID' => $this->MACROPROCESSO_ID,
        ]);

        $query->andFilterWhere(['like', 'UPPER(PROCESSO)', strtoupper($this->PROCESSO)])
            ->andFilterWhere(['like', 'UPPER(SGR_MACROPROCESSO.MACROPROCESSO)', strtoupper($this->MACROPROCESSO_ID)])
            ->andFilterWhere(['like', 'UPPER(AUT.AUT_SETORES.SIGLA)', strtoupper($this->AREA_ID)]);
                
        return $dataProvider;
    }

Inclusive o retorno dessa qry da o resultado da resposta da pergunta 1. E os campos de pesquisa, come citado no meu post anterior funcionam. Ex. o campo q quero exibir é a sigla da área. Se eu uso o campo de pesquisa, procurando por uma silga q esteja no resultado da query ele filtra direitinho na grid. Ou seja, para mim está 100% funcionando. Só esse grid q está de viadagem e ñ exibe oq tem q exibir, pois o dado está lá.

Evandro Sviercowski

unread,
Oct 6, 2016, 2:16:19 PM10/6/16
to yii-framew...@googlegroups.com
Não tinha visto que haviam mais comentários no email.

Sua relation macroprocessoAreas retorna uma array de objetos, então se vc tentar acessar direto macroprocessoAreas.macroprocesso.ID não vai funcionar, pois vc precisa acessar a uma posição do array primeiro.

Acho que a solução é fazer o que o Newerton sugeriu.

Faz esse teste, adiciona essa coluna no grid

[
    'label' => 'Area',
    'attribute' => 'AREA_ID',
    'value' => function ($model) {
$areas = ArrayHelper::map($model->macroprocessoAreas, 'ATRIBUTO DE INDICE', 'ATRIBUTO DE DESCRICAO'); //name or title
        return Inflector::sentence($areas, ' e ');
    },
],

Evandro Sviercowski

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 6, 2016, 2:28:45 PM10/6/16
to YFB - Yii Framework Brasil
Eu Percebi isso. E tentei usar o arrayMap. porrem ele só pega os IDs
Se eu quiser pegar a sigla da area ñ consigo. Não deveria conseguir pegar qq campo?

Baiscamente o array q ele exibe é:
[
   
0 => app\models\MacroprocessoArea#1
   
(
       
[
yii\db\BaseActiveRecord:_attributes] => [
           
'MACROPROCESSO_ID' => '435'
           
'AREA_ID'
=> '127'
           
'PROCESSO_ID'
=> '482'
           
'SUBPROCESSO_ID'
=> '483'
       
]
       
[
yii\db\BaseActiveRecord:_oldAttributes] => [
           
'MACROPROCESSO_ID' => '435'
           
'AREA_ID'
=> '127'
           
'PROCESSO_ID'
=> '482'
           
'SUBPROCESSO_ID'
=> '483'
       
]
       
[
yii\db\BaseActiveRecord:_related] => []
       
[
yii\base\Model:_errors] => null
       
[yii\base\Model:_validators] => null
       
[yii\base\Model:_scenario] => 'default'
       
[yii\base\Component:_events] => []
       
[
yii\base\Component:_behaviors] => []
   
)


Pelos testes que já fiz só consigo acessar pelo arrayMap os campos (MACROPROCESSO_ID,AREA_ID,PROCESSO_ID e SUBPROCESSO_ID).

De qq forma vou tentar usar esse exemplo citado. 

Cálcio

unread,
Oct 6, 2016, 2:39:01 PM10/6/16
to YFB - Yii Framework Brasil
Tem um outro problema tb. Aí nesse case ele traz todos as areas relacionadas. No meu caso quero só 1 área.
Só pra lembrar minha pesquisa já tras os dados como eu preciso.

Evandro Sviercowski

unread,
Oct 6, 2016, 4:47:57 PM10/6/16
to yii-framew...@googlegroups.com
O seu grid vai ter uma linha para cada processo, ou pode ter mais de uma linha por processo?

Por exemplo, se o processo estiver vinculado a um macroprocesso com mais de uma área, ele deve gerar uma linha no grid para cada área relacionada?

Evandro Sviercowski

Em 6 de outubro de 2016 15:39, Cálcio <calc...@gmail.com> escreveu:
Tem um outro problema tb. Aí nesse case ele traz todos as areas relacionadas. No meu caso quero só 1 área.
Só pra lembrar minha pesquisa já tras os dados como eu preciso.

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 7, 2016, 7:48:21 AM10/7/16
to YFB - Yii Framework Brasil
Então, cada processo tem só uma área e só pode ter 1 processo igual.
Porém com sua pergunta, vi que minha query está trazendo dados errado (não sei pq. Eu tinha acertado a query) mas isso eu já corrijo.

Só que msm eu corrigindo a consulta, o problema de eu não conseguir pegar por exemplo o campo sigla ainda é um problema.

Evandro Sviercowski

unread,
Oct 7, 2016, 9:59:03 AM10/7/16
to yii-framew...@googlegroups.com
Não consegui entender direito a sua modelagem, mas se você consegue trazer em uma query os dados que você precisa, acredito que de para altera a função que gera o DataProvider desse grid para usar \yii\db\Query() e construir a query trazendo só os dados que serão utilizados no grid.

$query = (new \yii\db\Query())
->from('processo')
->select(['FIELD1', 'FIELD2', '...'])
->andFilterWhere(['CONDICACAO1' => 'VALOR1'])
->andFilterWhere(['CONDICACAO2' => 'VALOR2']); 





Evandro Sviercowski

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 10, 2016, 12:40:43 PM10/10/16
to YFB - Yii Framework Brasil
Então @Evandro minha consulta está assim...

ProcessoSearch.php

        $query->select("A.SIGLA, SGR_PROCESSO.ID, SGR_PROCESSO.PROCESSO, SGR_PROCESSO.MACROPROCESSO_ID");
        
        /**
         * Jaz um join com o relacionamento que exite no model.
         * Dessa forma traz somente o(s) campo(s) que interessam na query
         * Caso queira trazer tudo basta usar 
         * $query->joinWith('nomeDoRelacionamento')
         */
        $query->innerJoin('SGR_MACROPROCESSO_AREA MA', 'MA.PROCESSO_ID = SGR_PROCESSO.ID');
        $query->innerJoin('AUT.AUT_SETORES A', 'A.ID = MA.AREA_ID');
        $query->joinWith('macroprocesso');

Evandro Sviercowski

unread,
Oct 10, 2016, 6:16:31 PM10/10/16
to yii-framew...@googlegroups.com
E o grid funcionou?

Evandro Sviercowski

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 13, 2016, 10:21:40 AM10/13/16
to YFB - Yii Framework Brasil
Não Continua exibindo (não definido).

Não sei mais oq fazer.

Evandro Sviercowski

unread,
Oct 15, 2016, 10:16:48 AM10/15/16
to yii-framew...@googlegroups.com
Pode me passar o código da view do grid?

Evandro Sviercowski

Em 13 de outubro de 2016 11:21, Cálcio <calc...@gmail.com> escreveu:
Não Continua exibindo (não definido).

Não sei mais oq fazer.

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você tiver preguiça até para formular sua pergunta os
participantes da lista terão "preguiça" de respondê-la.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Cálcio

unread,
Oct 17, 2016, 2:51:08 PM10/17/16
to YFB - Yii Framework Brasil
Evandro segue o código da minha view.

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
/*
 * Referência para kartik\grid\GridView
 */

/* @var $this yii\web\View */
/* @var $searchModel app\models\ProcessoSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */


// Rachel

$this->title = 'Processos';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="processo-index">    
    <?php
//    \yii\helpers\VarDumper::dump($dataProvider, 30, true);
//    echo '<hr><br><hr>';
//    \yii\helpers\VarDumper::dump($searchModel, 30, true);
        echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'responsive' => true,
        'hover' => true,
        'resizableColumns' => false,
        'columns' => [
            [
                'label' => 'Área',
                'attribute' => 'AREA_ID',
                'value' => function($model) {
                    \yii\helpers\VarDumper::dump($model, 30, true);
                },
//                'value' => 'macroprocesso.area.SIGLA',
//                'value' => 'macroprocessoAreas.0.AREA_ID',
                'headerOptions' => ['class' => 'col-sm-1 text-center'],
                'contentOptions' => ['class' => 'text-center'],
            ],
            [
                'label' => 'Macroprocesso',
                'attribute' => 'MACROPROCESSO_ID',
                'value' => 'macroprocesso.MACROPROCESSO',
            ],
            'PROCESSO',

            [
                'class' => 'yii\grid\ActionColumn',
                'header' => 'Ações',
                'headerOptions' => ['class' => 'col-sm-1 text-center'],
                'template' => '{view} {update} {delete}',
                'contentOptions' => ['class' => 'text-center'],
                'buttons' => [
                    'delete' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-trash text-danger"></span>', $url, [
                            'title' => 'Deletar',
                            'data-confirm' => 'Deseja excluir o item: ' . $model->PROCESSO . '?',
                            'data-method' => 'POST'
                        ]);
                    }
                ],
            ],
        ],
        
        'panel' => [
            'heading' => '<h3 class="panel-title">' . Html::encode($this->title) .'</h3>',
            'type' => 'primary',
            'footerOptions' => ['class' => 'panel-footer text-center'],
        ],
        
        'toolbar'=> [
            ['content' => 
                Html::a('<span class="glyphicon glyphicon-plus"></span>', ['create'], 
                [
                    'type'=>'button', 'title'=>'Adicionar Novo Processo', 
                    'class'=>'btn btn-primary', 
                ]) . ' ' . 
                Html::a('<span class="glyphicon glyphicon-repeat"></span>', ['index'], 
                [
                    'data-pjax' => 0, 
                    'class'=>'btn btn-default', 
                    'title'=>'Limpar Filtros',
                ])
            ],
            '{toggleData}',
        ],
    ]); ?>

</div>


Cálcio

unread,
Oct 19, 2016, 8:37:59 AM10/19/16
to YFB - Yii Framework Brasil
Galera quer agradecer pela ajuda fornecida. O @Eric me ajudou a finalizar essa pendência da minha app.

Basicamente bastou criar o campo $SIGLA no model e colocar como safe() que a info apareceu.

Valeu @Eric pela ajuda e paciência.
Reply all
Reply to author
Forward
0 new messages