Как показать песерту в нужной user_role? есть zainul имеет id_users_roles: 3, но здесь показывают в id_users_roles: 1 - PullRequest
0 голосов
/ 13 января 2020

Вот ответ

[
    "Peserta",
    [
        {
            "id_users": 1,
            "email": "admin@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 1,
                "id_users": 1,
                "id_role": 1,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": [
                    {
                        "id_peserta": 1,
                        "nama_peserta": "Zainul",
                        "tanggal_lahir": "1999-08-12",
                        "umur": 20,
                        "id_users_role": 3,
                        "organisasi": "UGM",
                        "foto_peserta": "/files/2652343.jpg",
                        "created_at": "2020-01-02 16:16:33",
                        "updated_at": "2020-01-02 16:16:33"
                    }
                ]
            }
        },
        {
            "id_users": 2,
            "email": "vicky@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 2,
                "id_users": 2,
                "id_role": 2,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": [
                    {
                        "id_peserta": 2,
                        "nama_peserta": "Icin",
                        "tanggal_lahir": "1999-06-30",
                        "umur": 20,
                        "id_users_role": 4,
                        "organisasi": "UGM",
                        "foto_peserta": "/files/2652343.jpg",
                        "created_at": "2020-01-02 16:16:33",
                        "updated_at": "2020-01-02 16:16:33"
                    }
                ]
            }
        },
        {
            "id_users": 3,
            "email": "zain@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 3,
                "id_users": 3,
                "id_role": 3,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": []
            }
        },
        {
            "id_users": 4,
            "email": "icin@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 4,
                "id_users": 4,
                "id_role": 3,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": []
            }
        },
        {
            "id_users": 5,
            "email": "penandatangan@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": null
        }
]

вот мой контроллер `

public function index(){
        $peserta = Users::with(['users_role', 'user_role.peserta'])->get();
        return response()->json(['Peserta', $peserta]);

`

я хочу получить такой результат, потому что id_users_roles был чужим key на peserta

[
    "Peserta",
    [
        {
            "id_users": 1,
            "email": "admin@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 1,
                "id_users": 1,
                "id_role": 1,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": []
            }
        },
        {
            "id_users": 2,
            "email": "vicky@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 2,
                "id_users": 2,
                "id_role": 2,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": []
            }
        },
        {
            "id_users": 3,
            "email": "zain@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 3,
                "id_users": 3,
                "id_role": 3,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": [
                    {
                        "id_peserta": 1,
                        "nama_peserta": "Zainul",
                        "tanggal_lahir": "1999-08-12",
                        "umur": 20,
                        "id_users_role": 3,
                        "organisasi": "UGM",
                        "foto_peserta": "/files/2652343.jpg",
                        "created_at": "2020-01-02 16:16:33",
                        "updated_at": "2020-01-02 16:16:33"
                    }
                ]
            }
        },
        {
            "id_users": 4,
            "email": "icin@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": {
                "id_users_role": 4,
                "id_users": 4,
                "id_role": 3,
                "created_at": "2020-01-02 16:16:33",
                "updated_at": "2020-01-02 16:16:33",
                "peserta": [
                    {                       {
                        "id_peserta": 2,
                        "nama_peserta": "Icin",
                        "tanggal_lahir": "1999-06-30",
                        "umur": 20,
                        "id_users_role": 4,
                        "organisasi": "UGM",
                        "foto_peserta": "/files/2652343.jpg",
                        "created_at": "2020-01-02 16:16:33",
                        "updated_at": "2020-01-02 16:16:33"
                    }
                ]
            }
        },
        {
            "id_users": 5,
            "email": "penandatangan@gmail.com",
            "created_at": "2020-01-02 16:16:33",
            "updated_at": "2020-01-02 16:16:33",
            "users_role": null
        }
]

сценарий должен быть показан на id_users_role: 3, потому что он имеет внешний ключ id_users_role: 3, но в моем ответе он показал на id_users: 1, так что не так с красноречивым?

Вот моя модель

Users. php

<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Model;
use Laravel\Lumen\Auth\Authorizable;

class Users extends Model implements AuthenticatableContract, AuthorizableContract
{
    use Authenticatable, Authorizable;

    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $primaryKey='id_users';

    protected $fillable = [
        'name', 'email', 'password'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password',
    ];

    public function users_role(){
        return $this->hasMany(UsersRole::class,'id_users_role');
    }
}

UsersRole. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UsersRole extends Model
{
    protected $primaryKey='id_users_role';
    protected $table = 'users_role';
    public function users(){
        return $this->belongsTo(Users::class,'id_users');
    }
    public function role(){
        return $this->belongsTo(Role::class,'id_role');
    }
    public function peserta(){
        return $this->hasMany(Peserta::class,'id_peserta');
    }
    public function panitia(){
        return $this->hasMany(Panitia::class,'id_panitia');
    }
}

Peserta. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Peserta extends Model
{
    protected $primaryKey='id_peserta';
    protected $table = 'peserta';
    public function users_role(){
        return $this->belongsTo(UsersRole::class,'id_users_role');
    }
    public function users(){
        return $this->belongsTo(Users::class,'id_users');
    }
}

Вот моя таблица

Таблица пользователей

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class TableUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id_users');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

Таблица UserRole

<?php

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

class TableUsersRole extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users_role', function (Blueprint $table) {
            $table->bigIncrements('id_users_role');
            $table->bigInteger('id_users')->unsigned();
            $table->bigInteger('id_role')->unsigned();
            $table->timestamps();
        });
    }

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

Таблица Peserta

<?php

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

class TablePeserta extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('peserta', function (Blueprint $table) {
            $table->bigIncrements('id_peserta');
            $table->string('nama_peserta');
            $table->date('tanggal_lahir');
            $table->integer('umur');
            $table->bigInteger('id_users_role');
            $table->string('organisasi');
            $table->string('foto_peserta');
            $table->timestamps();
        });
    }

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

У меня также был внешний ключ

Schema::table('users_role', function (Blueprint $table) {
            $table->foreign('id_users')->references('id_users')->on('users')->onDelete('cascade');
            $table->foreign('id_role')->references('id_role')->on('role')->onDelete('cascade');
        });

Schema::table('peserta', function (Blueprint $table) {
            $table->foreign('id_users_role')->references('id_users_role')->on('users_role')->onDelete('cascade');
        });
...