relaciones guide framework español ejemplos php gridview yii2

php - guide - ¿Cómo se muestran los datos de otra tabla en la vista de cuadrícula en yii2?



yii2 ejemplos (2)

En siteController escribo consulta y paso matriz de dataProvider a index.php para mostrar contener en forma de tabla. En index.php quiero mostrar el member name lugar de memberID . Para eso tengo una consulta interna de escritura y que se ejecuta satisfactoriamente en el símbolo del sistema con éxito. Aquí no puedo imprimir mi first name lugar de '' member id ''.

public function actionIndex() { $query = new /yii/db/Query; $query->select([''member.firstName'', ''complaint.practiceCode'',''complaint.id'', ''complaint.description'',''member.firstName'']) ->from([''complaint'']) ->innerJoin([''member'',''complaint.memberID = member.id'']) ->groupBy([''complaint.id'']) ->where([''complaint.deleted'' => ''N'']); $query->createCommand();

Aquí tengo datos de paso creando $dataProvider4 pero no puedo establecer el valor de firstName lugar de memberID .

$dataProvider4= new ActiveDataProvider([ ''query'' => $query, ''pagination'' => false, ]); return $this->render(''index'', [ ''dataProvider4''=>$dataProvider4]); <?= GridView::widget([ ''dataProvider''=>$dataProvider4, ''summary''=>''Total''.''&nbsp<b>''.$complaintModel.''</b>&nbsp''.''Complaints'', ''columns'' => [ [''class'' => ''yii/grid/SerialColumn''], ''practiceCode'', // ''memberID'', ''description'', ''status'', ], ]); ?>

He pasado datos a través del dataProvider.


Dado que está utilizando un marco poderoso, entonces sería mejor dejar que el marco haga lo complicado para usted, en lugar de intentar escribir sus propias consultas. Es para lo que fue diseñado Yii. Prueba esto en tu acción.

public function actionIndex() { $query = Member::find()-> ->select([''firstName'', complaint.practiceCode'', complaint.id'', ''complaint.description'']) ->groupBy([''complaint.id'']) ->joinWith(''complaints'')//Tells Yii to use the complains relation that we define below. By default it is an inner join ->where([''complaint.deleted'' => ''N'']); $dataProvider= new ActiveDataProvider([ ''query'' => $query, ''pagination'' => false, ]); return $this->render(''index'', [ ''dataProvider4''=>$dataProvider]);

En su modelo, necesitará definir una relación que pueda usar en la consulta;

public function getComplaints(){ return $this->hasMany(Complaints::className(), ''memberID'' => ''id''); }

Esto es útil ya que le permitirá recibir quejas sin tener que escribir su propia consulta para obtenerlas.

Yii clasificará todos los nombres de columna y escribirá la consulta.


La consulta no está relacionada con dataProvider y luego no es útil

Si desea extender la consulta, debe hacer esto y asignar a la consulta utilizada en el proveedor de datos, no solo realizar una consulta. De todos modos, puede obtener el nombre del miembro que usa una función anónima para recuperar el valor;

<?= GridView::widget([ ''dataProvider'' => $dataProvider4, //''summary''=>''Total''.''&nbsp<b>''.$complaintModel.''</b>&nbsp''.''Complaints'', ''columns'' => [ [''class'' => ''yii/grid/SerialColumn''], ''practiceCode'', /* [''attribute'' => '''', ''value'' => function ($model) { $myMemberModel = Member::find()-> where([''id''=> $model->memberID ])->one(); if (isset($myMemberModel) { return $myMemberModel->firtsName; } else { return '' id : ''. $model->memberID . '' do not match ''; } }],*/ ''firstName'', ''memberID'', ''description'', ''status'', ], ]); ?>