true, 'targetClass' => User::className(), 'targetAttribute' => ['from_user' => 'id']], [['to_user'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['to_user' => 'id']], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'chat_id' => 'Chat ID', 'status' => 'Status', 'comment' => 'Comment', 'from_user' => 'From User', 'to_user' => 'To User', ]; } /** * @return \yii\db\ActiveQuery */ public function getFromUser() { return $this->hasOne(User::className(), ['id' => 'from_user']); } /** * @return \yii\db\ActiveQuery */ public function getToUser() { return $this->hasOne(User::className(), ['id' => 'to_user']); } /** * @return \yii\db\ActiveQuery */ public function getMessages() { return $this->hasMany(Message::className(), ['chat_id' => 'chat_id']) ; } public function getAllMessages(){ $messages = $this->hasMany(Message::className(), ['chat_id' => 'chat_id'])->orderBy('message_id'); $messages_clone = clone($messages); Message::updateAll(['status' => 0], ['message_id' => $messages->select(['message_id'])->where(['status' => 1])->column()]); return $messages_clone; } public function getInterlocutor(){ if($this->from_user == \Yii::$app->user->id){ return UserInfo::findOne(['user_id'=>$this->to_user]); } else { return UserInfo::findOne(['user_id'=>$this->from_user]); } } public function hasNewMessage(){ $newMessages = $this->getMessages()->where(['status'=>'1', ]) ->andWhere(['<>','user_id', \Yii::$app->user->id])->all(); if($newMessages){ $this->newMessage = $newMessages; return true; } else { return false; } } }