Laravel дизайн отношений - PullRequest
       7

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

0 голосов
/ 25 февраля 2019

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

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

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

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

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

Миграция плат

<?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');
    }
}

1 Ответ

0 голосов
/ 25 февраля 2019

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

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)

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

...