在Yii2

时间:2017-04-11 10:50:06

标签: yii2

我知道有一些与此相关的答案,但我找不到任何有用的答案。

我收到此错误:Getting unknown property: app\models\Employees::holidays并且我不知道我做错了什么。

有人可以帮我解决这个问题吗?

这是我的型号代码:

<?php

namespace app\models;

use Yii;
use yii\data\ActiveDataProvider;
use yii\db\ActiveRecord;

/**
* This is the model class for table "employee".
*
* @property integer $id
* @property string $name
* @property string $surname
* @property string $employment_date
*/
 class Employee extends ActiveRecord
{
/** @const SCENARIO_CREATE scenario - create */
const SCENARIO_CREATE = 'create';

/** @const SCENARIO_EDIT scenario - edit */
const SCENARIO_EDIT = 'edit';

/** @const SCENARIO_SEARCH scenario - search */
const SCENARIO_SEARCH = 'search';

/** @const HOLIDAYS_PER_WORK_DAY Earned holidays per one working day. */
const HOLIDAYS_PER_WORK_DAY = 0.4;

/** @var integer $holidays calculated holidays field used in list. */
public $holidays;

/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'employee';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        // id
        ['id', 'required', 'except' => self::SCENARIO_SEARCH],
        ['id', 'integer'],

        // name
        ['name', 'required'],
        ['name', 'string', 'max' => 255],

        // surname
        ['surname', 'required'],
        ['surname', 'string', 'max' => 255],

        // employment date
        ['employment_date', 'required'],
        ['employment_date', 'match',
            'pattern' => '/^([1][9]|[2][0])[0-9]{2}[-](0[1-9]|1[0-2])[-](0[1-9]|[1-2][0-9]|3[0-1])$/',
            'message' => Yii::t('app',
                'Neteisingas datos formatas (Formatas: YYYY-MM-DD)'),
        ],
        ['employment_date', 'date',
            'format' => 'php:Y-m-d',
            'max' => time(),
            'tooBig' => Yii::t('app', 'Blogai įvesta  data. Vėliausia galima data: ' . date('Y-m-d'))
        ],
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id' => Yii::t('app', 'ID'),
        'name' => Yii::t('app', 'Darbuotojo vardas'),
        'surname' => Yii::t('app', 'Darbuotojo pavardė'),
        'employment_date' => Yii::t('app', 'Įdarbinimo data'),
    ];
}

/**
 * @inheritdoc
 */
public function scenarios()
{
    return [
        self::SCENARIO_CREATE => [
            'name',
            'surname',
            'employment_date',
        ],
        self::SCENARIO_EDIT => [
            'id',
            'name',
            'surname',
            'employment_date',
        ],
        self::SCENARIO_SEARCH => [
            'id',
            'name',
            'surname',
            'employment_date',
            'holidays',
        ],
    ];
}
/**
 * Creates data provider instance with search query applied
 *
 * @param array $params
 *
 * @return ActiveDataProvider
 */
public function search($params)
{
    $holidays = 'floor(datediff(curdate(), employment_date) * ' . 
Employee::HOLIDAYS_PER_WORK_DAY . ')';

    $query = Employees::find()->select([
        $this->tableName() . '.id',
        $this->tableName() . '.name',
        $this->tableName() . '.surname',
        $this->tableName() . '.employment_date',
        $holidays . ' as holidays',
    ]);

    // add conditions that should always apply here
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['name' => SORT_ASC],
        ],
    ]);

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'employment_date' => $this->employment_date,
    ]);

    $query->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'surname', $this->surname]);

    return $dataProvider;
    }
}

我的index.php文件:

<?php

use app\models\EmployeeSearch;
use yii\data\ActiveDataProvider;
use yii\grid\GridView;
use yii\helpers\Html;
use yii\web\View;
use yii\widgets\Pjax;
/* @var $this View */
/* @var $searchModel EmployeeSearch */
/* @var $dataProvider ActiveDataProvider */

$this->title = Yii::t('app', 'Employees');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="employee-index">

<h1><?= Html::encode($this->title) ?></h1>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>

<p>
    <?= Html::a(Yii::t('app', 'Create Employee'), ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?php Pjax::begin(); ?>    
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        'name',
        'surname',
        'employment_date',
        'holidays',

        ['class' => 'yii\grid\ActionColumn'],
    ],
   ]); ?>
<?php Pjax::end(); ?></div>

我知道它很长,但我不知道应该包含多少代码。

我认为holidays文件中的这一行index php导致错误。

4 个答案:

答案 0 :(得分:1)

在您的规则上添加此内容。

['holidays', 'integer']

在搜索过程中使用此$this->holidays

答案 1 :(得分:0)

您必须对所有index.php文件发表评论并运行您的代码。如果您没有任何错误,则表示错误在index.php页面中。 然后你必须逐个取消注释行,并在每次取消注释后运行你的项目。当你有错误时,它意味着该行是你的错误之一。然后kepp评论该行并逐个取消注释,并将该任务重复到文件结尾。 通过这种方式,您可以找到错误。

答案 2 :(得分:0)

您的代码有些奇怪:

我的假设是你有两种不同的模型: &#34;员工&#34;和&#34;员工&#34;在你的app / models目录中。

您正在使用&#34;员工&#34;在&#34;员工&#34;的搜索()中的模型。为此,您需要定义:

public $holidays;

在您的&#34;员工&#34;模型,如你的错误所示。

但我的猜测是你想使用可能&#34;员工&#34;搜索模型()。如果是这种情况,请更改&#34;员工&#34;到&#34;员工&#34;在那个职能中:

$query = Employee::find()...

答案 3 :(得分:-1)

在课程开始之前,在模型中添加假期的属性:

<script type="text/javascript"> function printPage() { window.print(); //document.execCommand('print', false, null); ////print each frames //for (var k = 0; k < window.frames.length; k++) { // window.frames[k].focus(); // window.frames[k].print(); //} } </script>

然后它将起作用。