Hello, i’m newbie in Yii and it’s the first time that i’m using a framework.
I already saw the guide and tutorials but there are somethings that i can’t understand how to do it. My biggest problem is how to access data from tables that I’ve joined.
I can search a value in the joined tables but i don’t know how show data from them in the search results and in the details. Can someone please help me out?
[size="4"]# So here is my DB:[/size]
produtos table
-
id
-
codigo
-
activo
-
prazos
-
img_p
produtos_campos table
-
id REFERENCES produtos.id
-
nome
-
descricao
-
caracteristicas
produtos_quantidade table
-
referencia REFERENCES produtos.codigo
-
preco_a
-
preco_b
-
preco_c
…
- preco_n
[size="4"]# And the 3 Models:[/size]
1 // Produtos Model
public function tableName() {
return 'produtos';
}
public function relations() {
return array(
‘produtos_campos’ => array(self::HAS_MANY, ‘ProdutosCampos’, ‘id’, ‘joinType’ => ‘INNER JOIN’),
'produtos_quantidade' => array(self::HAS_ONE, 'ProdutosQuantidade', 'referencia', 'joinType' => 'INNER JOIN'),
);
}
public function search() {
$key = $this->codigo;
$criteria = new CDbCriteria;
$criteria->together = true;
$criteria->select= "t.id, t.codigo, t.codigo_site, t.img_p, t.prazos, tt.id as pcid, tt.nome, tt.descricao, tt.caracteristicas AS bAttribute1";
$criteria->join .= "INNER JOIN produtos_campos AS tt ON t.id = tt.id";
$criteria->condition .= "(t.activo = '1' AND t.id_frontend='0' AND tt.nome != '' AND tt.lingua = 'pt' AND t.img_p != '')";
$criteria->condition .= " AND ( tt.nome LIKE '%".$key."%' ";
$criteria->condition .= " OR t.codigo LIKE '%".$key."%'";
$criteria->condition .= " OR t.codigo_site LIKE '%".$key."%'";
$criteria->condition .= " OR tt.descricao LIKE '%".$key."%'";
$criteria->condition .= " OR tt.caracteristicas LIKE '%".$key."%'";
$criteria->condition .= " )";
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
2 // Produtos Campos Model
public function tableName() {
return 'produtos_campos';
}
public function relations() {
return array(
'produtos' => array(self::BELONGS_TO, 'Produtos', 'id'),
);
}
3 // Produtos Quantidade Model
public function tableName() {
return 'produtos_quantidade';
}
public function relations() {
return array(
'produtos' => array(self::BELONGS_TO, 'Produtos', 'codigo'),
);
}
[size=“4”]# This is what i’ve got in the view results[/size]
I’m displaying the values of the table produtos in the search results with the help of CListView, <?php echo GxHtml::encode($data->codigo); ?> but when i’m trying to echo the value of descricao with <?php echo GxHtml::encode($data->descricao); ?>, from table produtos_campos, i’ve got a “Cexception Property “Produtos.descricao” is not defined.”
[size=“4”]# And this is what i’ve got in the view details.[/size]
<?php $this->widget(‘zii.widgets.CDetailView’, array(
'data' => $model,
'attributes' => array(
'descricao',
'caracteristicas',
'prazo',
'tipo_impressao',
'tipo_impressao_letra',
),
)); ?>
My question is how can i access to the values nome, descricao, caracteristicas of the table produtos_campos and the values from preco_a, preco_b, …, preco_n from the table produtos_quantidade to display in the search results and detail of the product?
I appreciate any help because i don’t know what to do more.
Thanks in advance,