I has Status Model
<?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();
}
}
Register Model
<?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;
}
}
I wanna get username of Status by echo $data->user->username but I has a error Trying to get property of non-object at $data->user->username I need your help. Thank for advance!
Looks like user is an array. Try $data->user['username']
use 'with' property of criteria like this:
$criteria->with = array('user').
Its better than lazy load. Check this http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-performance. And it will be better if u can give some more code where u use $data->user->username, i gues it's gridview?
This error (Trying to get property of non-object) mean in the "user" table dont have the record which have id field value equivalent to $data->user_id.
Check the value of $data->user_id and make sure it exist in id field of "user" table.
Try to change your Status
model relation string to this:
'user' => array(self::BELONGS_TO, 'Register', array('user_id' => 'user_id)),
Hope it will help.
you should be able to use print_r($data)
to see inner structure of variable. then you will have opinion on how to use variable.
Hope this could help you
$data["user"]["username"]
user
is a relation, so it will be either an instance of theUser
class or NULL (unless someone's been messing withaddRelatedRecord
manually). Which is consistent with the phpdoc annotation for it - DCoder 2012-04-05 19:16