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
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.