Laravel morphedByMany, где условие и количество - PullRequest
0 голосов
/ 30 июня 2018

У меня есть две таблицы: сообщения и страницы, которые используют одну таблицу для тегов (morphToMany).

Мои таблицы и отношения:

Таблица: теги идентификатор, имя

public function posts()
{
return $this->morphedByMany('App\Post', 'taggable');
}
public function pages()
{
return $this->morphedByMany('App\Page', 'taggable');
}

Таблица: сообщения идентификатор, имя, активный

public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}

Таблица: Страницы идентификатор, имя, активный

public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}

Как я могу получить все теги и считать из обеих таблиц, где pages.active и posts.active

Я пробовал этот запрос, но этот запрос возвращает только теги обеих моделей:

Tag::whereHas("posts", function($q) {

$q->where("posts.active", "=", 1);

})->whereHas("pages", function($q) {

$q->where("pages.active", "=", 1);

})->get();

Мне нужен запрос, который может вернуть тег, если существует в одной из моделей, но где активен = 1.

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете попробовать это

$tags = Tag::where( function( $query ){
        $query->whereHas('posts', function ( $subquery ){
            $subquery->where('active', 1 );
        })
        ->orWhereHas('pages',function ( $subquery ){
            $subquery->where('active', 1 );
        });
      })->withCount('posts','pages')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...