From 95adeca0ae1cd6c5475242d036ee75584aedd2a1 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Thu, 12 Dec 2019 21:30:28 +0100 Subject: Add message model --- src/Models/Message.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ src/Models/User/User.php | 38 +++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/Models/Message.php (limited to 'src/Models') diff --git a/src/Models/Message.php b/src/Models/Message.php new file mode 100644 index 00000000..cb658fc6 --- /dev/null +++ b/src/Models/Message.php @@ -0,0 +1,68 @@ + 'integer', + 'receiver_id' => 'integer', + 'read' => 'boolean', + ]; + + /** @var string[] */ + protected $fillable = [ + 'user_id', + 'receiver_id', + 'read', + 'text', + ]; + + /** @var array */ + protected $attributes = [ + 'read' => false, + ]; + + /** + * @return BelongsTo + */ + public function receiver(): BelongsTo + { + return $this->belongsTo(User::class, 'receiver_id'); + } +} 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'); + } } -- cgit v1.2.3-54-g00ecf