summaryrefslogtreecommitdiff
path: root/src/Models/User/User.php
diff options
context:
space:
mode:
authorMichael Weimann <mail@michael-weimann.eu>2019-12-12 21:30:28 +0100
committerIgor Scheller <igor.scheller@igorshp.de>2019-12-30 01:53:20 +0100
commit95adeca0ae1cd6c5475242d036ee75584aedd2a1 (patch)
tree593dbc9888cf447429f3c8f954b52b60095d2ca0 /src/Models/User/User.php
parent46f80fbed262a30ba31e1d031e2512f278352e12 (diff)
Add message model
Diffstat (limited to 'src/Models/User/User.php')
-rw-r--r--src/Models/User/User.php38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Models/User/User.php b/src/Models/User/User.php
index e2ee9b21..c4bc1fcb 100644
--- a/src/Models/User/User.php
+++ b/src/Models/User/User.php
@@ -4,6 +4,7 @@ namespace Engelsystem\Models\User;
use Carbon\Carbon;
use Engelsystem\Models\BaseModel;
+use Engelsystem\Models\Message;
use Engelsystem\Models\News;
use Engelsystem\Models\NewsComment;
use Engelsystem\Models\Question;
@@ -42,6 +43,9 @@ use Illuminate\Database\Query\Builder as QueryBuilder;
*
* @property-read Collection|Question[] $questionsAsked
* @property-read Collection|Question[] $questionsAnswered
+ * @property-read Collection|Message[] $messagesReceived
+ * @property-read Collection|Message[] $messagesSent
+ * @property-read Collection|Message[] $messages
*/
class User extends BaseModel
{
@@ -141,4 +145,38 @@ class User extends BaseModel
return $this->hasMany(Question::class, 'answerer_id')
->where('answerer_id', $this->id);
}
+
+ /**
+ * @return HasMany
+ */
+ public function messagesSent(): HasMany
+ {
+ return $this->hasMany(Message::class, 'user_id')
+ ->orderBy('created_at', 'DESC')
+ ->orderBy('id', 'DESC');
+ }
+
+ /**
+ * @return HasMany
+ */
+ public function messagesReceived(): HasMany
+ {
+ return $this->hasMany(Message::class, 'receiver_id')
+ ->orderBy('read')
+ ->orderBy('created_at', 'DESC')
+ ->orderBy('id', 'DESC');
+ }
+
+ /**
+ * Returns a HasMany relation for all messages sent or received by the user.
+ *
+ * @return HasMany
+ */
+ public function messages(): HasMany
+ {
+ return $this->messagesSent()
+ ->union($this->messagesReceived())
+ ->orderBy('read')
+ ->orderBy('id', 'DESC');
+ }
}