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.

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样