1

我有状态模型

    <?php

/**
 * This is the model class for table "status".
 *
 * The followings are the available columns in table 'status':
 * @property integer $status_id
 * @property string $message
 * @property string $created
 * @property integer $thumbs_up
 * @property integer $thumbs_down
 * @property string $reply
 * @property integer $user_id
 *
 * The followings are the available model relations:
 * @property Comment[] $comments
 * @property User $user
 * @property ThumbUpDown[] $thumbUpDowns
 */
class Status extends CActiveRecord {

    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Status the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'status';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('message, created', 'required'),
            array('thumbs_up, thumbs_down, user_id', 'numerical', 'integerOnly' => true),
            array('message', 'length', 'max' => 255),
            array('reply', 'length', 'max' => 45),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('status_id, message, created, thumbs_up, thumbs_down, reply, user_id', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'comments' => array(self::HAS_MANY, 'Comment', 'status_id'),
            'user' => array(self::BELONGS_TO, 'Register', 'user_id'),
            'thumbUpDowns' => array(self::HAS_MANY, 'Thumb_up_down', 'status_id'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'status_id' => 'Status',
            'message' => 'Message',
            'created' => 'Created',
            'thumbs_up' => 'Thumbs Up',
            'thumbs_down' => 'Thumbs Down',
            'reply' => 'Reply',
            'user_id' => 'User',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('status_id', $this->status_id);
        $criteria->compare('message', $this->message, true);
        $criteria->compare('created', $this->created, true);
        $criteria->compare('thumbs_up', $this->thumbs_up);
        $criteria->compare('thumbs_down', $this->thumbs_down);
        $criteria->compare('reply', $this->reply, true);
        $criteria->compare('user_id', $this->user_id);

        return new CActiveDataProvider($this, array(
                    'criteria' => $criteria,
                ));
    }

    public function getUrl() {
        return Yii::app()->createUrl('status', array(
                    'id' => $this->status_id,
                    'title' => $this->message,
                ));
    }

    public function addComment($comment) {
        $comment->status_id = $this->status_id;
        $comment->user_id = Yii::app()->user->id;
        $comment->created = date('Y-m-d H:i:s');
        return $comment->save();
    }



}

注册模型

    <?php

/**
 * This is the model class for table "user".
 *
 * The followings are the available columns in table 'user':
 * @property integer $user_id
 * @property string $username
 * @property string $password
 * @property string $name_first
 * @property string $name_last
 * @property string $email
 * @property string $picture
 * @property integer $active
 * @property string $created
 */
class Register extends CActiveRecord {

    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Register the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'user';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            //array('username, password, name_first, name_last, email, active, created', 'required'),
            array('username, password, name_first, name_last, email', 'required'),
            array('active', 'numerical', 'integerOnly' => true),
            array('username, password, name_first, name_last', 'length', 'max' => 45),
            array('email', 'length', 'max' => 100),
            array('picture', 'length', 'max' => 255),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('user_id, username, name_first, name_last, email, active', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'friends' => array(self::HAS_MANY, 'Friend', 'user_id'),
            'friendLists' => array(self::HAS_MANY, 'FriendList', 'user_id'),
            'notifications' => array(self::HAS_MANY, 'Notification', 'user_id'),
            'profiles' => array(self::HAS_MANY, 'Profile', 'user_id'),
            'statuses' => array(self::HAS_MANY, 'Status', 'user_id'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'user_id' => 'User',
            'username' => 'Username',
            'password' => 'Password',
            'name_first' => 'Name First',
            'name_last' => 'Name Last',
            'email' => 'Email',
            'picture' => 'Picture',
            'active' => 'Active',
            'created' => 'Created',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('user_id', $this->user_id);
        $criteria->compare('username', $this->username, true);
        //$criteria->compare('password', $this->password, true);
        $criteria->compare('name_first', $this->name_first, true);
        $criteria->compare('name_last', $this->name_last, true);
        $criteria->compare('email', $this->email, true);
        //$criteria->compare('picture', $this->picture, true);
        $criteria->compare('active', $this->active);
        //$criteria->compare('created', $this->created, true);

        return new CActiveDataProvider($this, array(
                    'criteria' => $criteria,
                ));
    }

// encrypt password
    public function beforeSave() {
        $this->created = date('Y-m-d H:i:s');
        $this->password = md5($this->password);
        $this->active = 1;
        $this->picture = '';
        return true;
    }

}

我想通过 echo $data->user->username 获取 Status 的用户名,但我有一个错误Trying to get property of non-object at $data->user->username 我需要你的帮助。感谢提前!

4

6 回答 6

4

看起来 user 是一个数组。尝试$data->user['username']

于 2012-04-05T16:59:43.707 回答
0

使用标准的'with'属性,如下所示:

$criteria->with = array('user').

它比延迟加载更好。检查这个http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-performance。如果你能在你使用$data->user->username的地方提供更多代码会更好,我猜它是gridview?

于 2012-04-05T18:07:39.650 回答
0

此错误(尝试获取非对象的属性)意味着“用户”表中没有 id 字段值等于 $data->user_id 的记录。

检查 $data->user_id 的值并确保它存在于“user”表的 id 字段中。

于 2012-04-05T19:10:19.090 回答
0

尝试将您的Status模型关系字符串更改为:

'user' => array(self::BELONGS_TO, 'Register', array('user_id' => 'user_id)),

希望它会有所帮助。

于 2012-04-06T12:43:29.417 回答
0

你应该可以print_r($data)用来查看变量的内部结构。那么您将对如何使用变量有意见。

于 2012-07-05T18:32:51.113 回答
0

希望这可以帮助你

$data["user"]["username"]
于 2014-12-18T11:13:36.873 回答