douao1926 2017-05-10 09:28 采纳率: 0%
浏览 266

将Yii2 php stdClass()对象转换为特定类的对象

I have a Array from MySql Query and What I did is convert it to object. But after convert into object Is has become object of stdClass() So I want it to be a object of Theme class.

My Cotroller Code

public function actionIndex()
{
    // $theme = Theme::find()->all();
    $query = "SELECT t.*,COUNT(d.id) AS total_downloads FROM `themes` AS T 
                        LEFT JOIN downloads AS D 
                        ON D.theme_id = T.id GROUP 
                        by t.id ORDER BY total_downloads DESC LIMIT 6";
        $connection=Yii::$app->db;  
        $trends = $connection->createCommand($query);
        $model = $trends->queryAll();


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

And View Code Look Like

<?php foreach ($model as $themes): ?>
<?php $theme = (object) $themes; ?>

<?php var_dump($theme) ?>
<div class="col-md-4">

</div>  
<?= $theme->name ?>     

How can I covert $model to a object of class Theme.php

  • 写回答

1条回答

  • douwen5690 2017-05-10 10:25
    关注

    I found a Solution here.

     function cast($destination, $sourceObject)
    {
        if (is_string($destination)) {
            $destination = new $destination();
        }
        $sourceReflection = new ReflectionObject($sourceObject);
        $destinationReflection = new ReflectionObject($destination);
        $sourceProperties = $sourceReflection->getProperties();
        foreach ($sourceProperties as $sourceProperty) {
            $sourceProperty->setAccessible(true);
            $name = $sourceProperty->getName();
            $value = $sourceProperty->getValue($sourceObject);
            if ($destinationReflection->hasProperty($name)) {
                $propDest = $destinationReflection->getProperty($name);
                $propDest->setAccessible(true);
                $propDest->setValue($destination,$value);
            } else {
                $destination->$name = $value;
            }
        }
        return $destination;
    

    and call function like this

        <?php 
        use yii\helpers\Html;
        $theme_obj = new \common\models\Theme();
        use common\Constant;
     ?>
    
     <?php foreach ($model as $themes): ?>
        <?php $theme = (object) $themes; ?>
        <?php var_dump(Constant::cast($theme_obj , $theme)) ?>
     <?php endforeach ?>
    

    It works perfectly for me.

    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试