Дизайн отношений Laravel

Я работаю над проектом управления командой. У меня проблема с отношениями.

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

Есть ли способ, как отображать данные об отношениях таким образом?

{
    "id": 1,
    "name: "Test",
    "members": [
        {
            ... user model here
            "name": "Peter",
            "email": "[email protected]",
        }
    ]
}

Мои миграции:

Миграция досок

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBoardsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('boards', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('boards');
    }
}

Миграция членства

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMembershipsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('memberships', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('board_id')->unsigned();
            $table->integer('user_id')->unsigned();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('memberships');
    }

}

Обновлено:

Модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Board extends Model
{
    protected $fillable = ['name'];

    public function members() {
        return $this->hasMany(Membership::class)->with('user');
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Membership extends Model
{
    protected $fillable = ['board_id', 'user_id'];
    protected $hidden = ['created_at', 'updated_at'];

    public function user() {
        return $this->hasOne(User::class, 'id', 'user_id');
    }
}

Покажите нам, где вы установили отношения, также известные как belongsTo, hasOne, hasMany и т. д.

JCode 24.02.2019 22:26

Какой у Вас вопрос? Вы говорите об участниках нетерпеливая загрузка с советами? Board::with('members')->get() ?

Don't Panic 24.02.2019 23:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

class User
{    
    public function boards()
    {
        return $this->belongsToMany('App\Board', 'memberships', 'user_id', 'board_id');
    }
}

class Board
{    
    public function members()
    {
        return $this->belongsToMany('App\User', 'memberships', 'board_id', 'user_id');
    }
}

С этими определенными отношениями вам действительно не нужна модель членства, если в ней нет дополнительных полей, и вы можете написать такой код:

User::find($id)->boards
Board::find($id)->members
Board::with('members')->find($id)

Вы также можете прочитать документацию по Отношения «многие ко многим»

Это не совсем то, что я хочу, JSON, который я получаю, выглядит так: pastebin.com/mrJ6BgZg

Veljko Stevic 24.02.2019 22:45

Этот JSON является результатом App\Board::with('members')->get();?

dparoli 24.02.2019 22:50

Нет, результат JSON $board->members;

Veljko Stevic 24.02.2019 22:52

пожалуйста, попробуйте App\Board::with('members')->get(); или App\Board::with('members')->find($id);

dparoli 24.02.2019 22:53

ИМХО это похоже на результат ваших отношений, а не тех, что я выложил

dparoli 24.02.2019 23:03

Другие вопросы по теме