Как я могу выбрать столбцы по типу в полиморфных отношениях? - PullRequest
0 голосов
/ 20 сентября 2019

Как видно из названия, у меня есть полиморфное отношение многих ко многим, я хочу выбрать определенные столбцы каждой модели.Я уже посмотрел документацию по Laravel, но нашел только этот код, который похож на тот, который я ищу.

$comments = App\Comment::whereHasMorph(
    'commentable', 
    ['App\Post', 'App\Video'], 
    function (Builder $query, $type) {

        if ($type === 'App\Post') {
            $query->where('content', 'like', 'foo%');
        }
    }
)->get();

Я хочу сделать что-то подобное, но так:

$comments = App\Comment::with(
    'commentable', 
    ['App\Post', 'App\Video'], 
    function (Builder $query, $type) {
        if ($type === 'App\Post') {
            $query->select('id', 'title');
        }elseif($type === 'App\Video'){
           $query->select('id', 'name');
        }
    }
)->get();

Я надеюсь, что вы можете понять меня и помочь с этой проблемой, спасибо

1 Ответ

0 голосов
/ 20 сентября 2019

Предположим, что полиморфный метод в каждом классе Model выглядит следующим образом:

public function commentType() 
{ 
    return $this->morphOne('App\Comment', 'commentable');
}

Простой способ - добавить два метода в класс Comment:

открытая функция getIsPostAttribute () {return $ this-> commentType == 'App \ Post';}

публичная функция getIsVideoAttribute () {return $ this-> commentType == 'App \ Video';}

Тогда просто:

$comment = App\Comment::find(1)->isPost; // True or False
$comment = App\Comment::find(1)->isVideo; // True or False

Теперь выполнять запросы будет легко:

$posts  = App\Comment::where('isPost', true)->get();
$videos = App\Comment::where('isVideo', true)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...