Yii中的关系

时间:2012-04-05 16:57:17

标签: php yii

我有 状态模型

    <?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-&gt; user-&gt; username获取Status的用户名 但我在$ data-&gt; user-&gt;用户名时遇到错误试图获取非对象的属性 我需要你的帮助。 感谢提前!

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

使用'with'这样的标准属性:

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

它比懒惰负载更好。检查此http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-performance。 如果您可以使用$ data-&gt; user-&gt; username来提供更多代码会更好,我认为它是gridview?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

希望它会有所帮助。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

希望这可以帮到你

$data["user"]["username"]