Yii2尝试使用listView关系模型获取非对象错误的属性

时间:2018-04-03 19:11:04

标签: php mysql yii2 yii2-model

我有两张桌子。

  1. 生(ID,电子邮件,密码,f_name,l_name,UNIQUE_ID,CREATE_DATE,LAST_UPDATE)

  2. 评论(ID,ad_id,commented_user,评论,CREATE_DATE,LAST_UPDATE)

  3. 表关系 - > comments.commented_user = students.email

    评论课

        class Comments extends \yii\db\ActiveRecord
    {
    
        //public $commented_user_fName;
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'comments';
        }
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [['comment'], 'string'],
                [['create_date', 'last_update'], 'safe'],
                [['ad_id', 'commented_user'], 'string', 'max' => 64],
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'id' => 'ID',
                'ad_id' => 'Ad ID',
                'commented_user' => 'Commented User',
                'comment' => 'Comment',
                'create_date' => 'Create Date',
                'last_update' => 'Last Update',
            ];
        }
    
        public function beforeSave($insert) {
            if ($this->isNewRecord){
                $this->commented_user = $_SESSION['login_student_email'];
                $this->create_date = new Expression('NOW()');
            }
    
    
            return parent::beforeSave($insert);
        }
    
        public function getStudentName(){
            $this->hasOne(Students::className() ,['commented_user' => 'email']);
        }
    
    }
    

    我的评论Controller Index methord

    public function actionIndex($id)
        {
            $model = new Comments();
            $model->setAttribute('ad_id',$id);
            $searchModel = new CommentsSearch();
            $dataProvider = $searchModel->search(["CommentsSearch"=>['ad_id'=>$id]]);
    
            return $this->renderAjax('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
                'model' => $model,
            ]);
        }
    

    我尝试在ListView中获取学生表的f_name

    <?=
                ListView::widget([
                    'dataProvider' => $dataProvider,
                    'layout' => "{items}",
                    'itemView' => 'view',
                ]);
                ?>
    

    下面的项目视图文件代码

    <a href="#"><?= $model->studentName->f_name ?></a>
    

    我收到了这个错误

      

    PHP注意 - yii \ base \ ErrorException   试图获得非对象的属性

    在此行<a href="#"><?= $model->studentName->f_name ?></a>

    我的代码出了什么问题。请帮帮我

2 个答案:

答案 0 :(得分:0)

.是连接运算符,因此$model->studentName.f_name不会被视为$model->{studentName.f_name}而是被视为{$model->studentName} . f_name

您可能需要使用$model->studentName->f_name

答案 1 :(得分:0)

您应该像使用任何其他模型一样以$ model-&gt; studentName-&gt; f_name的身份访问该属性