Laravel - Как я могу сгруппировать заказы клиентов по их статусу

У меня ситуация, которую я не могу исправить, у меня есть 3 таблицы / модели со структурой, как показано ниже:

  • Модель клиента: Client->hasMany(Order::Class)
  • Модель заказа: Order->belongsTo(Client::Class) и Order->belongsTo(Status::Class)
  • Статус Модель: Status->hasMany(Order::class)

Я хочу иметь возможность группировать заказы каждого клиента по их статусам, например: 3 отменены - 4 выполнены - 5 обработки

Я пробовал это, но не получилось :(

Client Model {


    public function {

        return $this->orders()->selectRaw('status_id, count(id) as total')->groupBy('status_id);

        // orders() = is the relation a client hasmany orders
    }

}

может кто-нибудь помочь, пожалуйста, спасибо

Что вы имеете в виду под «не сработало»?

Jonas Staudenmeir 08.09.2018 01:57

это означает, что это не сработало так, как я ожидал, мне все еще нужно найти клиента и цепочку по этому методу, чтобы сгруппировать его заказы по статусу, я знаю, что я все еще что-то упускаю, также есть ограничение, потому что не у всех клиентов еще есть заказы, поэтому мне нужно реализовать какой-то $ clients = Client :: has ('orders'), и это вернет пустой массив элемента

Rabii Brahimi 08.09.2018 14:17

Добавьте образцы данных и ожидаемый результат.

Jonas Staudenmeir 08.09.2018 14:19

У меня есть модели деталей ниже: class Client extends Model {public function orders () {return $ this-> hasMany (Order :: class); }} class Order extends Model {public function client () {return $ this-> ownTo (Client :: class); }} class Status расширяет модель {public function orders () {return $ this-> hasMany (Order :: class); }}

Rabii Brahimi 09.09.2018 12:57

У меня есть модели деталей ниже: class Client extends Model {public function orders () {return $ this-> hasMany (Order :: class); }} class Order extends Model {public function client () {return $ this-> ownTo (Client :: class); }} class Status расширяет модель {public function orders () {return $ this-> hasMany (Order :: class); }} например, я хочу, чтобы список отображался, например: Заказы: 3 завершено - 2 обработки - 2 отменено

Rabii Brahimi 09.09.2018 13:07

Как вы используете опубликованный вами запрос / отношение?

Jonas Staudenmeir 10.09.2018 15:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
6
193
1

Ответы 1

Определите таким образом ваши отношения в модели клиента

public function orders()
{
    return $this->hasMany(Order::class);
}

public function getOrdersCompletedAttribute()
{
    return $this->orders->where('id_status', 5)->count();
}

public function getOrdersProcessingAttribute()
{
    return $this->orders->where('id_status', 1)->count();
}

Предположим, что статус 1 = «обработка» и 5 = «завершено».

Вы можете получить доступ к атрибуту de следующим образом:

$client->orders_completed

Чтобы получить 4

Другие вопросы по теме