Различное отношение по условию

У меня есть таблица подписчики, с:

id, user_id, follower_id, type

type = type of follow, if follow user = 0, page = 1, group = 1

I use the user_id to put the page_id and group_id too.

Теперь проблема, я хочу установить разные отношения, если тип отличается ... Если тип = 0, будет связан с таблицей пользователей и общей таблицей, если тип = 1, будет связан с таблицей страниц ...

Я пробую вот так:

Модель:

public function page_links()
{
    return $this->hasMany(Link::class, 'page_id', 'user_id')->Select('links.id', 'links.title', 'links.photo', 'links.country', 'links.friendly_url', 'links.clicks', 'links.description', 'links.suggestions', 'links.count_comments', 'links.url', 'links.shares', 'links.page_id', 'links.tag_id', 'links.created_at')->where('sponsored', 0)->where('scheduled', 0)>where('status', 1)->take(3)->orderBy('id','desc');
}

public function user_links()
{
    return $this->hasMany(Share::class, 'user_id', 'user_id')->Select('id', 'link_id', 'user_id', 'shared_in', 'content', 'created_at')->take(3)->orderBy('id', 'desc')->where('type', '=', 0);
}

     public function scopeProfile($query) {
        return $query
        ->when($this->type == 0, function($q){
        return $q->with('user_links');
        })
        ->when($this->type == 1, function($q){
        return $q->with('page_links');
        })
        ->when($this->type == 2, function($q){
        return $q->with('group_links');
        });
     }

Контроллер:

 $feed = Feed::Profile()->where('follower_id', auth()->user()->id)
                ->take(10)
                ->get();

Но ВСЕ, даже тип 1, возвращает отношение user_links. Не знаю, верна ли связь ...

Кто-нибудь может мне помочь?

Стоит ли изучать 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
0
21
1

Ответы 1

Что ж, с моей точки зрения, вам следует изменить свою миграцию.

Вместо того, чтобы иметь свою таблицу с:

id, user_id, follower_id, type

Я сделаю это:

id, user_id, page_id, group_id, follower_id, type

Не делайте таких странных вещей в своей базе данных, просто добавьте 2 поля и / или отношения в таблицу миграции. Установите для него значение unsigned () AND nullable (), так вы сможете быстро узнать, есть ли связь с каждой страницей или группой, и вам не придется делать странные вещи для проверки это: D

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