在View Yii 2中显示相关数据

时间:2018-08-21 18:53:44

标签: php database yii2 related-content

我是Yii 2的新手,我正在为我学校的图书馆创建一个清单系统,但是我遇到了问题。

首先,我有一个这样的关系:

enter image description here

我想显示他认为的一本书的所有adq(每本书唯一的编号-这样我们就不必为每本副本都再次捕获该本书)与书adq相关的{1}}显然位于底部。

enter image description here

我的视图:

id

我的控制器(LibrosController):

<?php

use yii\helpers\Html;
use yii\widgets\DetailView;
use yii\helpers\Url;
use yii\grid\GridView;

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

$this->title = $model->lib_titulo;
$this->params['breadcrumbs'][] = ['label' => 'Libros', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="libros-view">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a('Modificar', ['update', 'id' => $model->lib_id], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Borrar', ['delete', 'id' => $model->lib_id], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?>
    </p>
<div class="row" align="center">
     <?php
       if ($model->lib_image_web_filename!='') {
         echo '<br /><p><img width="500" src="'.Url::to('@web/', true). '/uploads/libros/'.$model->lib_image_web_filename.'"></p>';
       }    
    ?>
    </div>
<div class="row" style="
text-align: center;
font: normal normal bold 15px/1 'lato';
color: rgba(7,7,7,1);
text-align: center;
">
    <?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'lib_id',
            'lib_titulo',
            'lib_autor',
            //'lib_edicion',
            'editorialNombre',
            'ubicacionNombre',
            'lib_isbn',
            'lib_clasificacion',
            'lib_seccion',
            //'lib_image_src_filename',
            //'lib_image_web_filename',
        ],
    ]) ?>
</div>


</div>

我的模型(Libros.php):

<?php

namespace backend\controllers;

use Yii;
use app\models\Libros;
use app\models\LibrosSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\web\UploadedFile;

/**
 * LibrosController implements the CRUD actions for Libros model.
 */
class LibrosController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }

    /**
     * Lists all Libros models.
     * @return mixed
     */
    public function actionIndex()
    {
        $searchModel = new LibrosSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    /**
     * Displays a single Libros model.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */

    public function actionCreate()
    {
        $model = new Libros();

        if ($model->load(Yii::$app->request->post())) {
          $image = UploadedFile::getInstance($model, 'image');
           if (!is_null($image)) {
             $model->lib_image_src_filename = $image->name;
             $ext = end((explode(".", $image->name)));
              // generate a unique file name to prevent duplicate filenames
              $model->lib_image_web_filename = Yii::$app->security->generateRandomString().".{$ext}";
              // the path to save file, you can set an uploadPath
              // in Yii::$app->params (as used in example below)                       
              Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/web/uploads/libros/';
              $path = Yii::$app->params['uploadPath'] . $model->lib_image_web_filename;
               $image->saveAs($path);
            }
            if ($model->save()) {             
                return $this->redirect(['view', 'id' => $model->lib_id]);             
            }  else {
                var_dump ($model->getErrors()); die();
             }
              }
              return $this->render('create', [
                  'model' => $model,
              ]);     
    }

    /**
     * Updates an existing Libros model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post())) {
          $image = UploadedFile::getInstance($model, 'image');
           if (!is_null($image)) {
             $model->lib_image_src_filename = $image->name;
             $ext = explode(".", $image->name);
             $ext_final = end($ext);
              // generate a unique file name to prevent duplicate filenames
              $model->lib_image_web_filename = Yii::$app->security->generateRandomString().".{$ext_final}";
              // the path to save file, you can set an uploadPath
              // in Yii::$app->params (as used in example below)                       
              Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/web/uploads/libros/';
              $path = Yii::$app->params['uploadPath'] . $model->lib_image_web_filename;
               $image->saveAs($path);
            }
            if ($model->save()) {             
                return $this->redirect(['view', 'id' => $model->lib_id]);             
            }  else {
                var_dump ($model->getErrors()); die();
             }
              }
              return $this->render('create', [
                  'model' => $model,
              ]);     
    }

    /**
     * Deletes an existing Libros model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionDelete($id)
    {
        $this->findModel($id)->delete();

        return $this->redirect(['index']);
    }

    /**
     * Finds the Libros model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param integer $id
     * @return Libros the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id)
    {
        if (($model = Libros::findOne($id)) !== null) {
            return $model;
        }

        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

我的搜索模型(LibrosSearch.php):

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "libros".
 *
 * @property int $lib_id
 * @property string $lib_titulo
 * @property string $lib_autor
 * @property string $lib_edicion
 * @property int $lib_ubi
 * @property int $lib_editorial_id
 * @property string $lib_isbn
 * @property string $lib_clasificacion
 * @property string $lib_seccion
 * @property string $lib_image_src_filename
 * @property string $lib_image_web_filename
 *
 * @property Adq[] $adqs
 * @property Editorial $libEditorial
 * @property Ubicacion $libUbi
 * @property LibrosCarreras[] $librosCarreras
 * @property Carreras[] $licCarreras
 */
class Libros extends \yii\db\ActiveRecord
{
    const PERMISSIONS_PRIVATE = 10;
      const PERMISSIONS_PUBLIC = 20;  
      public $image;
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'libros';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['lib_titulo', 'lib_autor', 'lib_ubi', 'lib_isbn', 'lib_clasificacion', 'lib_seccion', 'lib_image_src_filename', 'lib_image_web_filename'], 'required'],
            [['lib_ubi', 'lib_editorial_id'], 'integer'],
            [['lib_titulo'], 'string', 'max' => 120],
            [['lib_autor', 'lib_clasificacion'], 'string', 'max' => 64],
            //[['lib_edicion'], 'string', 'max' => 3],
            [['lib_isbn'], 'string', 'max' => 32],
            [['lib_seccion'], 'string', 'max' => 2],
            [['lib_editorial_id'], 'exist', 'skipOnError' => true, 'targetClass' => Editorial::className(), 'targetAttribute' => ['lib_editorial_id' => 'edi_id']],
            [['lib_ubi'], 'exist', 'skipOnError' => true, 'targetClass' => Ubicacion::className(), 'targetAttribute' => ['lib_ubi' => 'ubil_id']],
            [['lib_image_src_filename', 'lib_image_web_filename'], 'string', 'max' => 100],
            [['image'], 'safe'],
            [['image'], 'file', 'extensions'=>'jpg, gif, png'],
            [['image'], 'file', 'maxSize'=>'1000000'],
             [['lib_image_src_filename', 'lib_image_web_filename'], 'string', 'max' => 255],        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
             'lib_id' => 'ID',
            'lib_titulo' => 'Titulo',
            'lib_autor' => 'Autor',
            //'lib_edicion' => 'Edicion',
            'lib_editorial_id' => 'Editorial',
            'lib_isbn' => 'ISBN',
            'lib_clasificacion' => 'Clasificacion',
            'lib_ubi' => 'Ubicacion',
            'lib_seccion' => 'Seccion',
            'image' => 'Captura',
            'lib_image_src_filename' => Yii::t('app', 'Nombre de Archivo'),
            'lib_image_web_filename' => Yii::t('app', 'Nombre del Directorio'),
            'editorialNombre' => 'Editorial',
            'ubicacionNombre' => 'Ubicacion',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAdqs()
    {
        return $this->hasMany(Adq::className(), ['adq_libro_id' => 'lib_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */


    /**
     * @return \yii\db\ActiveQuery
     */
    public function getLibrosCarreras()
    {
        return $this->hasMany(LibrosCarreras::className(), ['lic_libros_id' => 'lib_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */

    public function getEditorial0()
    {
        return $this->hasOne(Editorial::className(), ['edi_id' => 'lib_editorial_id']);
    }
    public function getEditorialNombre()
    {
        return $this->editorial0->edi_nombre;
    }

    public function getLibUbi()
    {
        return $this->hasOne(Ubicacion::className(), ['ubil_id' => 'lib_ubi']);
    }

        public function getUbicacionNombre()
    {
        return $this->libUbi->ubil_nombre;    }
}

我如何完成此任务?

2 个答案:

答案 0 :(得分:0)

[   
    'attribute' => 'adq_libro_id',
    'value' => implode(', ', \yii\helpers\ArrayHelper::map($model->Adqs, 'id', 
                                function ( $model ) 
                                {
                                    return $model['adq'];
                                }
                            )),
     'format' => 'raw'
],

尝试这样。检查属性的正确名称

答案 1 :(得分:0)

在模型Libros.php中,您具有此功能。

public function getAdqs()
{
    return $this->hasMany(Adq::className(), ['adq_libro_id' => 'lib_id']);
}

这意味着您可以像这样访问Libros的关系:

// where $model is an instance of Libros
$model->adqs->property_name

或作为功能

$model->getAdqs();