Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Laravel
Войти
Регистрация
Восстановить пароль
 
Gvizl
7 / 7 / 2
Регистрация: 31.01.2014
Сообщений: 380
1

Как получить количество сообщений из другой таблицы в orm запросе?

24.05.2019, 20:34. Просмотров 276. Ответов 4
Метки нет (Все метки)

Как получить количество сообщений из другой таблицы в orm запросе?

PHP
1
2
3
4
5
6
7
     $messages = ChatMessage::where('user_id', Auth::id())
            ->orderBy('created_at', 'desc')
            ->select(['chat_id'])
            ->distinct()
            ->with('chat.last_message.user_fields')
            ->with('chat.last_message.user_session')
            ->get();
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  <?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class ChatMessage extends Model
{
    protected $fillable = ['chat_id','user_id', 'text'];
 
    public function user_fields()
    {
        return $this->hasMany('App\Models\UserFieldsValues','user_id','user_id')
            ->where('fields_id',35)
            ->orWhere('fields_id',36);
    }
 
    public function user_session()
    {
        return $this->hasOne('App\Models\Session','user_id','user_id')
            ->orderBy('last_activity', 'desc')
            ->where('last_activity','>', time()-5*60)
            ->select(['id','last_activity', 'user_id']);
    }
 
    public function chat()
    {
        return $this->hasOne('App\Models\Chat','id','chat_id');
    }
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class Chat extends Model
{
    protected $fillable = ['name','id'];
 
    public function last_message()
    {
        return $this->hasOne('App\Models\ChatMessage')->orderBy('created_at', 'desc');
    }
 
    public function unread_messages_count()
    {
        return $this->hasMany('App\Models\ChatMessage')->where('read',0)->count();
    }
}
Добавлено через 1 минуту
Варинаты которые я не знаю как приурочить

Код
->with(['unread_messages_count' => function($query)
            {
                $query->orderBy('created_at', 'desc');
                MessageChat::where('active', 1)->where('read',0)->count();
            }])
             //->select(DB::raw('count(*) as chat_messages'))
           ->join('chat_messages', 'chat_messages.chat_id', '=', 'orders.user_id')
            ->select('users.id', 'contacts.phone', 'orders.price');
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2019, 20:34
Ответы с готовыми решениями:

Как получить количество сообщений в очереди???
Мне нужно получить количество сообщений в очереди и если это количество больше 100, то отправить...

Как получить количество непрочитанных сообщений (IdPop3)
подскажите как получить количество непрочитанных сообщений,.. и вообще как можно через idpop3...

Как получить количество записей в запросе?
Здравствуйте! Как в запросе SELECT Таблица1.* FROM Таблица1; получить количество записей?...

Как получить данные из другой таблицы в условии WHERE
типичный запрос UPDATE users SET role='модератор' WHERE id_user=1; только как это...

Как получить данные из другой таблицы внутри триггерной функции
Добрый день. Нужна помощь в создании триггерной функции на PL/pgSQL Задача у меня следующая:...

4
tarasalk
1460 / 913 / 349
Регистрация: 13.06.2013
Сообщений: 3,165
24.05.2019, 21:09 2
Гляньте метод withCount

Цитата Сообщение от Gvizl Посмотреть сообщение
return $this->hasMany('App\Models\ChatMessage')->where('read',0)->count();
Так точно не будет работать. Связи должны возвращать query, а count вернет уже подсчитанный результат.
0
Gvizl
7 / 7 / 2
Регистрация: 31.01.2014
Сообщений: 380
28.05.2019, 16:19  [ТС] 3
tarasalk, метод withCount классный, но, к сожалению, через связь он не проходит
->withCount('chat.unread_messages_count')
Только через саму модель
0
tarasalk
1460 / 913 / 349
Регистрация: 13.06.2013
Сообщений: 3,165
28.05.2019, 16:34 4
А что по вашему он должен вернуть?
Если количество непрочитанных сообщений в каждом чате, то это пишется примерно так:
PHP
1
2
3
4
5
ChatMessage::query()
    ->with(['chat' => function ($query) {
        $query->withCount('unread_messages');
    }])
    ->get()
1
Gvizl
7 / 7 / 2
Регистрация: 31.01.2014
Сообщений: 380
29.05.2019, 00:19  [ТС] 5
tarasalk, спасибо, но я в message_chat просто сделал has many по айди чата
и
Код
->withCount('unread_messages')
стало достаточно
0
29.05.2019, 00:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2019, 00:19

Получение значений по значению полученному из другой таблицы в одном запросе
Привет! Есть 2 таблицы: COLOR: id | color NEGATIVE: id_color | id_negative | status ...

Вывод нескольких записей из 1й таблицы и одну запись из другой в 1м запросе
Здравствуйте! Имеется страница с сообщениями, на которой выводятся список активных тем (tickets)...

Получить значения таблицы, где есть одни записи из другой таблицы, но нет других
Добрый вечер. Дело в том, что у меня не получается написать запрос к базе, где есть связка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru