Arhn - архитектура программирования

Создайте блог в Laravel с категориями сообщений и пользовательскими настройками.

Я создаю блог для удовольствия. В моем блоге есть пользователи, сообщения и фиксированный список предопределенных категорий.

1) Посты принадлежат многим категориям. 2) Пользователи могут указать предпочтения категории и, следовательно, принадлежать ко многим категориям.

У меня это настроено как ряд отношений «многие ко многим»:

In User.php:

/**
* A user belongs to many categories
*/
public function categoryPreferences()
{
    return $this->belongsToMany('App\Category');
}

In Post.php:

/**
* A Post Can Have Many Likes
*
* @return \Illuminiate\Database\Eloquent\Relations\belongsToMany
*/

public function categories()
{
return $this->belongsToMany('App\Category');
}

И обратное каждому в Category.php:

/**
* A category belongs to many users
*/
public function users()
{
return $this->belongsToMany('App\User');
}

/**
* A category belongs to many posts.
*
* @return \Illuminiate\Database\Eloquent\Relations\belongsToMany
*/

public function posts()
{
return $this->belongsToMany('App\Post');
}

У меня есть соответствующие таблицы соединений category_post и category_user для поддержки каждой связи. Впрочем, может быть, я неправильно об этом думаю.

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

$categories = $user->categoryPreferences->pluck('id');

И может сделать то же самое для сообщений:

$categories = $post->categories->pluck('id')

Однако я не уверен, как объединить две коллекции вместе. Я изучил полиморфизм, но это не совсем правильно. Может ли кто-нибудь указать мне на правильную концепцию?


Ответы:


1

Думаю, вместо ORM лучше использовать Query Builder, код будет лучше читаться и писаться.

05.05.2016

2

Отношение $user->categoryPreferences даст вам набор моделей категорий, у которых есть запись в сводной таблице для соответствующего пользователя.

Теперь вы можете перебирать каждую модель категории в этой коллекции и получать доступ к сообщениям, используя метод each() в коллекции.

Из документации Laravel,

Метод each перебирает элементы в коллекции и передает каждый элемент обратному вызову:

(в твоем случае)

$user->categoryPreferences->each(function ($category, $key) {
  echo $category->post;
});

Это предполагает, что вы определили отношение публикации для модели категории. Также не забывайте фильтровать дубликаты сообщений.

10.12.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..