Blame view

app/Models/Chat.php 1.99 KB
712f07ca2   Сергей П   часть задачи по р...
1
2
3
4
5
6
  <?php
  
  namespace App\Models;
  
  use Illuminate\Database\Eloquent\Factories\HasFactory;
  use Illuminate\Database\Eloquent\Model;
2f592b01f   Сергей П   сообщения
7
  use Carbon\Carbon;
712f07ca2   Сергей П   часть задачи по р...
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  
  class Chat extends Model
  {
      use HasFactory;
  
      protected $fillable = [
          'user_id',
          'to_user_id',
          'is_removed',
          'is_fixed',
          'last_message_date',
          'last_message_id',
          'fixed_time'
      ];
  
      public function user() {
          return $this->belongsTo(User::class, 'to_user_id');
      }
  
      public function worker() {
          return $this->belongsTo(Worker::class, 'to_user_id', 'user_id');
      }
  
      public function employer() {
          return $this->belongsTo(Employer::class, 'to_user_id', 'user_id');
      }
  
      public function last_message() {
          return $this->belongsTo(Message::class, 'last_message_id');
      }
a93910932   Сергей П   рефакторинг сообщ...
38
39
40
41
      public function unread_messages()
      {
          return $this->hasMany(Message::class, 'user_id', 'to_user_id');
      }
2f592b01f   Сергей П   сообщения
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
      public static function pin_chat(int $chat_id, $fixed)
      {
          return self::where('id', '=', $chat_id)
              ->update([
                  'is_fixed' => !empty($fixed) ? 1 : 0,
                  'fixation_date' => !empty($fixed) ? Carbon::now() : null
              ]);
      }
  
      public static function remove_chat(int $chat_id)
      {
          return self::where('id', '=', $chat_id)
              ->update(['is_removed' => 1]);
      }
  
      public static function get_user_chats(int $user_id){
          return Chat::query()
              ->with('user')
              ->with('worker')
              ->with('employer')
              ->with('last_message')
              ->withCount(['unread_messages' => function ($query) use($user_id) {
                  $query->where('to_user_id', '=', $user_id)->where('flag_new', '=', 1);
              }])
              ->where('user_id', '=', $user_id)
              ->where('is_removed', '=', 0)
              ->orderByDesc('is_fixed')
              ->orderByDesc('fixation_date')
              ->orderByDesc('last_message_date')
              ->paginate(5)
          ;
      }
712f07ca2   Сергей П   часть задачи по р...
74
  }