Yii2:how to get return value in view from model?

2019-09-19 23:28发布

问题:

I have a table name "staff".Staff table has one to many relation with attendance table.

In model Staff.php

public function getAttendances()
    { 
        if(isset($_GET['startdat']))
        $start_date=$_GET['startdat'];
        if(isset($_GET['enddate']))
        $end_date=$_GET['enddate'];
        if(isset($_GET['startdat'])){
        return $this->hasMany(Attendance::className(), ['staff_id' => 'id'])
                ->where('daytime >= "'.$start_date.'" and daytime<="'.$end_date.'"');
        }
        else{
        return $this->hasMany(Attendance::className(), ['staff_id' => 'id'])
                ->andOnCondition(['daytime' => 'Absent'])
                ->orOnCondition(['status' => 'Present'])
                ->orOnCondition(['status' => 'leave']);
        }


    }
public function getPresent(){
        $present=0;
              foreach($this->attendances as $attendance){ 
                  if($attendance->status=='Present')
                    $present++; 
                  } 
              return $present;
    }


    public function getAbsent(){
        $Absent=0;
              foreach($this->attendances as $attendance){ 
                  if($attendance->status=='Absent')
                  $Absent++; 
              } 
              return $Absent;
    }
    public function getLeave(){
        $Leave=0;
              foreach($this->attendances as $attendance){ 
                  if($attendance->status=='Leave')
                  $Leave++; 
              } 
              return $Leave;
    }

in views report.php

<?=

    GoogleChart::widget(['visualization' => 'PieChart',
                'data' => [
                    ['Task', 'Hours per Day'],
                    ['Present', 5],
                    ['Absent', 2],
                    ['leave', 4],
                ],]);
?> 

i want to get the returned value of $present ,$Absent and $leave. to make GoogleChart dynamic. How to echo the function returned value from model in view in yii2 ?

回答1:

You can try this code for getting value from model's functions.

use path\to\model\Staff;
<?=
   GoogleChart::widget(['visualization' => 'PieChart',
                'data' => [
                    ['Task', 'Hours per Day'],
                    ['Present', Staff::getPresent()],
                    ['Absent', Staff::getAbsent()],
                    ['leave', Staff::getLeave()],
                ],]);
?>


回答2:

I think you should use static function

 public static function getAttendances()
 { 
  .......




 public static function getPresent(){
    $present=0;
          foreach(self::attendances() as $attendance){ 
              if($attendance->status=='Present')
                $present++; 
              } 
          return $present;
}


public static  function getAbsent(){
    $Absent=0;
          foreach(self::attendances() as $attendance){ 
              if($attendance->status=='Absent')
              $Absent++; 
          } 
          return $Absent;
}
public static function getLeave(){
    $Leave=0;
          foreach(self::attendances() as $attendance){ 
              if($attendance->status=='Leave')
              $Leave++; 
          } 
          return $Leave;
}

and the use in your widget

use path\to\model\Staff;
<?php echo GoogleChart::widget(['visualization' => 'PieChart',
            'data' => [
                ['Task', 'Hours per Day'],
                ['Present', Staff::getPresent()],
                ['Absent', Staff::getAbsent()],
                ['leave', Staff::getLeave()],
            ],]);
?>