Juan Manuel Rodriguez A. Juan Manuel Rodriguez A. - 1 year ago 310
PHP Question

How to pass relationship data to listview in yii2

im trying to print an attribite from another table in yii2 Listview but im not able to get the data i need to print into the listview

$query = Producto::find()->joinWith(['mPrecios']);

$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 6,

Data Provider in search model

$searchModel = new ProductoSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$modelCliente=new Cliente;
$cliente = Cliente::getClientes();
$rows = Producto::autocomplete();//Se envia la variable que contiene los productos a la vista
return $this->render('index', array(
'model' => $model,
'searchModel' => $searchModel,
'listDataProvider' => $dataProvider

Send DtaProvider through Controller

<?php \yii\widgets\Pjax::begin(['id'=>'listaProductos','enablePushState' => true, 'timeout' => 8000000, 'clientOptions' => ['container' => 'pjax-container']]); ?>


'class'=>'col-lg-12 list-wrapper inline row-eq-height',

'dataProvider' => $listDataProvider,
'itemView' => function ($model, $key, $index, $widget) {
$itemContent = $this->render('_tabla_producto',['model' => $model]);
return $itemContent;
'itemOptions' => [
'tag' => false,
'summary' => '',
'layout' => '{items}{pager}',

'pager' => [
'firstPageLabel' => 'Primera',
'lastPageLabel' => 'Ultima',
'maxButtonCount' => 5,
'options' => [
'class' => ' pagination col-xs-12'
<?php \yii\widgets\Pjax::end(); ?>


<?php $IdProducto = $model['Refe'];?>
<div id="producto-<?php echo $IdProducto;?>" class="content inline producto col-lg-4 box-body" >
<div class="row">
<div class="col-lg-6">
<img class='img-responsive' src="<?php echo $model['ImagenProducto']?>"/>
<div class="row">
<div class="col-lg-6" style="height:200px;">
if($model['Fraccion'] > 1){
echo "<button id='fraccion-$IdProducto' class='btn btn-danger btn-xs fraccionado' data-toggle='modal' data-target='#modalFraccion'><b>F</b></button>";
echo "<button id='fraccion-$IdProducto' class='btn btn-default btn-xs disabled'><b>NF</b></button>";
<b>Nombre:</b><br><?= $model['DescripcionCorta'] ?><br>
<b>Presentacion:</b><br><?= $model['PresentacionCorta'] ?><br>
<div class="row">
<div class="col-lg-6">
<div class="input-group">
<span class="input-group-btn" >
<button id="menos-<?php echo $IdProducto;?>" type="button" class="btn btn-sm btn-default btn-minuse" min='0' value="0">-</button>
<input id="input-<?php echo $IdProducto;?>" type="text" value="0" class="form-control text-center" style="height:30px;">
<span class="input-group-btn">
<button id="mas-<?php echo $IdProducto;?>" type="button" class="btn btn-sm btn-default btn-pluss" min='0' value="0">+</button>
<div class="col-lg-6 pull-left">
<button id="anadir-<?php echo $IdProducto;?>" type="button" class="text-center center-block btn btn-sm btn-default btn-add">AƱadir</button>

Answer Source

I will assume you have your relation set up correctly in your model, getMPrecios().

If this is a hasOne() you can access the relational data with $model->mPrecios->attributeName and if its a hasMany() you'll have to do a

foreach($model->mPrecios as $mprecios)
    echo $mprecios->attributeName;

This relational values should be accessible regardless of whether you eagerly load them (like you do with a joinWith()) or lazy load them.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download