Я работаю над проектом управления командой. У меня проблема с отношениями.
Я хочу отображать пользователей на досках, но также хочу, чтобы они хорошо выглядели и легко читались. Я уже разработал отношения, но когда я увидел вывод отношений в формате 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');
}
}
Какой у Вас вопрос? Вы говорите об участниках нетерпеливая загрузка с советами? Board::with('members')->get() ?






Вы можете попытаться определить отношения в моделях как «многие ко многим», то есть:
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
Этот JSON является результатом App\Board::with('members')->get();?
Нет, результат JSON $board->members;
пожалуйста, попробуйте App\Board::with('members')->get(); или App\Board::with('members')->find($id);
ИМХО это похоже на результат ваших отношений, а не тех, что я выложил
Покажите нам, где вы установили отношения, также известные как
belongsTo,hasOne,hasManyи т. д.