Как получить последнюю запись таблицы, относящуюся к области видимости? Laravel

Я пытаюсь принести только POST без комментариев, и если у них есть комментарии, принесите мне только если последний комментарий contact_type_id = 4, проблема, которую мне удается принести мне список продуктов с комментариями или без них, но я не могу заставить меня также сделайте фильтр, который, если последний комментарий с ID 4, показывал его мне, чтобы он решил предоставить мне все данные.

Как я могу решить эту проблему, поскольку после этого запроса я увеличиваю область действия, которая фильтрует больше элементов Продукта.

Контроллер

$leads = Lead::openedStage1()->doesntCommentOrHasComments($filter_id);

Модель

public function scopeOpenedStage1($query){
    $query
        ->where('status_id','!=',5)->where('status_id','!=',4);
}

public function scopeDoesntCommentOrHasComments($query,$filter_id){
        if ($filter_id == 1 )
            $query->doesntHave('comments')->orWhereHas('comments', function($q){
                $q->where('contact_type_id','=',4)->orderBy('date_publication','DESC');//not worked latest
            });

        if ($filter_id == 2)
            $query->doesntHave('comments')->orWhereHas('comments', function ($q){
                $q->where('contact_type_id','!=',4);
            });
            
        return $query;
    }

Можете ли вы просто применить ->limit(1) к вашему запросу? Это позволит вам продолжить связывание методов, но не возвращает ничего, как это делает ->first().

Tim Lewis 09.04.2021 23:57

@TimLewis Я думаю, что это не сработает, поскольку он хочет получить последний комментарий (если он есть), то есть contact_type_id = 4, если он отличается от 4, не получите его, поэтому limit(1) всегда будет получать последний комментарий, игнорируя contact_type_id.

matiaslauriti 10.04.2021 02:24

Автор, я не разбираюсь в таких запросах (если вы можете сделать это в одном запросе), но я могу сказать вам, что избегайте использования жестко закодированных ссылок на ваш код. Например, не используйте 5 или 4 в качестве status_id в вашем коде, сделайте их константами в правильном классе и ссылайтесь на эту константу, поэтому, если однажды изменится, она повсюду изменится на одно и то же значение, а также ее можно будет отслеживать ( IDE). То же самое для contact_type_id или любого enum, который вы хотите использовать в PHP. Моя скромная рекомендация.

matiaslauriti 10.04.2021 02:26
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
3
6
0

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