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

В каком контроллере я должен писать логику для моделей, которые находятся в отношениях

Я делаю блог с пользователями, у каждого из которых есть сообщения. Естественно, у меня есть UserController, PostController и модель User и Post.

Модель User имеет отношения «один ко многим» с моделью Post, например:

// User Model
public function posts()
    {
        return $this->hasMany('App\Post');
    }

Я хотел бы получить все сообщения определенного пользователя, используя

// UserController or PostController...
$posts = User::find($id)->posts()->get()

Должен ли я написать эту логику в моем UserController (потому что он использует модель пользователя) или я должен написать логику в моем PostController (потому что он возвращает сообщения)

Примечание. Пожалуйста, простите меня, если этот вопрос не отформатирован должным образом, это мой первый вопрос о переполнении стека, спасибо


  • На самом деле вам просто нужно создать отношения, как вы это сделали, и тогда вы можете называть их как хотите. Кроме того, если вы хотите наоборот (чтобы узнать, кто является пользователем, стоящим за публикацией), вы можете создать отношение в своей модели публикации, используя belongsTo(). 09.10.2019

Ответы:


1

На самом деле вам просто нужно создать отношение, как вы это сделали, и тогда вы сможете вызывать его где угодно, как вы описали, с помощью User::find($id)->posts()->get().

Итак, если вам нужно, например, вернуть сообщение пользователя в представлении, вы можете сделать что-то подобное в своем UserController:

public function postsView(User $user)
{
    $posts = $user->posts()->get();
    return view('user.posts', compact('posts'));
}

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

// Post Model
public function user()
{
    return $this->belongsTo('App\User');
}

Дайте мне знать, если это помогло.

09.10.2019
  • Большое спасибо, Лукас, это определенно очень помогло, я думаю, что теперь у меня есть немного больше ясности в том, как организовать мои методы. 09.10.2019
  • @JonathandeKock Добро пожаловать, сэр. Рад, что смог помочь! 09.10.2019

  • 2

    Вы можете написать запрос в любом месте UserController или PostController

    $user = User::with('posts')->whereId($id)->first();
    echo '<pre>';
    print_r($user->toArray());
    exit;
    

    Вы получите user со всеми posts

    09.10.2019

    3

    В вашей модели User поместите отношения.

    public function posts()
    {
        return $this->hasMany('App\Post','foreign_key','local_key');
    }
    

    В вашем UserController или PostController получите результаты, используя

    $posts = User::find($id);
    foreach($posts->posts as $post)
    {
      echo $post->title;
    }
    
    09.10.2019

    4

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

    Например, если вы показываете сообщения, связанные с пользователем, на странице профиля пользователя с другими биоданными и т. д., тогда вы вызовете отношение в UserController.

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

    Короче говоря, это выбор, основанный на удобстве и оптимизации.

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

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге 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 , и использованием..

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