【问题标题】:Yii2 : Getting unknown property when using findBySqlYii2:使用 findBySql 时获取未知属性
【发布时间】:2015-06-04 12:51:37
【问题描述】:

我正在使用 findBySql() 从数据库中获取数据, 我想用表格显示数据。

这是我的控制器上的代码:

$sql = "SELECT presensi.presensi_tanggal 'tanggal', sum(if( hadir.keteranganhadir_id='1',1,0)) 'hadir', sum(if( hadir.keteranganhadir_id='2',1,0)) 'tidak_hadir', count(*) 'total' FROM hadir, keteranganhadir, presensi where hadir.keteranganhadir_id = keteranganhadir.keteranganhadir_id and hadir.presensi_id = presensi.presensi_id group by presensi.presensi_tanggal";

    $model = Hadir::findBySql($sql)->all();

    return $this->render('index', [
        'hadir' => $model,
    ]);

所以,我想展示“tanggal”、“hadir”、“tidak hadir”和“total”。

在我看来,

<?php foreach($hadir as $data): ?>
        <tr>
        <td></td>
        <td class="tbl_column_name"><?=$data->tanggal;?></td>
        <td class="tbl_column_name"><?=$data->hadir;?></td>
        <td class="tbl_column_name"><?=$data->tidak_hadir;?></td>
        <td class="tbl_column_name"><?=$data->total;?></td>
        <td><a href="kehadiran/view?id=1">Lihat</a></td>
        </tr>
    <?php endforeach; ?>

但是,我遇到了这样的错误 未知属性 – yii\base\UnknownPropertyException 获取未知属性:common\models\data\Hadir::tanggal。 那么,有什么问题,我该怎么办?谢谢~

[编辑]

哈迪尔模型:

    <?php
namespace common\models\data;

use Yii;

/**
 * This is the model class for table "hadir".
 *
 * @property integer $ADIKBINAAN_ID
 * @property integer $PRESENSI_ID
 * @property integer $KETERANGANHADIR_ID
 *
 * @property Adikbinaan $aDIKBINAAN
 * @property Presensi $pRESENSI
 */
class Hadir extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'hadir';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['ADIKBINAAN_ID', 'PRESENSI_ID', 'KETERANGANHADIR_ID'], 'required'],
            [['ADIKBINAAN_ID', 'PRESENSI_ID', 'KETERANGANHADIR_ID'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ADIKBINAAN_ID' => 'Adikbinaan  ID',
            'PRESENSI_ID' => 'Presensi  ID',
            'KETERANGANHADIR_ID' => 'Keteranganhadir  ID',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getADIKBINAAN()
    {
        return $this->hasOne(Adikbinaan::className(), ['ADIKBINAAN_ID' => 'ADIKBINAAN_ID']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPRESENSI()
    {
        return $this->hasOne(Presensi::className(), ['PRESENSI_ID' => 'PRESENSI_ID']);
    }
}

【问题讨论】:

  • 你的原始sql返回结果了吗?
  • 是的。在 mysql 中,查询返回结果
  • 你能展示你的模型类吗?
  • 我添加了有问题的模型类
  • 尝试在您的 Hadir 模型中声明一个公共变量/属性:public $tanggal 就在模型声明的开头。

标签: mysql sql web frameworks yii2


【解决方案1】:

默认情况下,从返回的行中提取的属性只是可以在表中找到的列。

我从您的代码中得到的印象是这些字段不是。要解决此问题,您可能应该重写 attributes()-function 并将这些属性声明为有效:

public function attributes()
{
    return array_merge(parent::attributes(), ['tanggal', 'hadir', 'tidak_hadir', 'total']);
}

这应该指示populateRecord()-function 也填充那些。

【讨论】:

  • 我应该在模型中添加这个吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2015-04-30
  • 2018-07-10
  • 2019-04-08
  • 2021-01-30
相关资源
最近更新 更多