Laravel: Как отобразить «От многих ко многим ко многим» в зависимости от количества вложенных отношений - PullRequest
0 голосов
/ 02 сентября 2018

Я столкнулся с небольшой трудностью в поиске лучшего способа получить вложенные отношения через два отношения многие-ко-многим.

У меня есть 3 модели: статья, ключевое слово и тема со следующими отношениями:

Статья <-> Ключевое слово (много ко многим);

Статья <-> Тема (много ко многим).

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

Код пока:

$subject = Subject::with('articles.keywords')->find($id);
    $keywordsArray = $subject->articles->pluck('keywords');
    $keywords = (new Collection($keywordsArray))->collapse()->groupBy('id');

return $keywords; // returns the collection with all the duplicate keywords
return $keywords->unique('id') // returns unique keywords.

Я знаю, чтобы вернуть отображение счетчика из коллекции следующим образом:

$keywordsCount = (new Collection($keywordsArray))->collapse()->groupBy('id')->map(function($item, $key){
        return $item->count();
    });
    return $keywordsCount; // returns ex: {"1":2,"2":2,"3":2,"6":1}

Все работает, единственный вопрос, который остается: как мне объединить уникальные ключевые слова с $wordsCount, или, как лучше всего использовать эти 2, чтобы я мог изменить размер пузыря ключевого слова на основе этого количества.

Большое спасибо заранее и божья скорость.

1 Ответ

0 голосов
/ 02 сентября 2018

Это зависит от того, как часто вам нужно получать эту объединенную информацию, но для этой коллекции, которую вы получили сейчас, вы всегда можете просто назначить счетчик как временный атрибут для каждого текущего keyword экземпляра в коллекции. В качестве альтернативы, вы также можете просто упаковать оба в массив, для чего бы я просто сделал что-то вроде использования zip() метода сбора:

return $keywords->unique('id')->zip($keywordsCount);

, который создаст коллекцию связанных массивов, таких как [['keyword1', 1], ['keyword2', 3], ...], объединяя информацию по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...