Laravel 5.6 - отношение один ко многим - PullRequest
0 голосов
/ 04 июня 2018

Я изучаю laravel и php.У меня есть объект-член, у которого может быть только 1 языковая опция, но есть несколько языковых опций на выбор.Объект-член - мой главный объект.Я хочу проверить, правильно ли я настроил свои отношения, но не вижу желаемого результата при тестировании (я должен видеть только язык, выбранный в поле языка, а не все атрибуты столбца на элемент, как показано ниже).Так что это вывод моего файла show.blade.php:

enter image description here

Это мой файл show.blade.php:

@extends('layouts.master')

@section('title', $member->name)

@section('content')
    <h1>Member Details: </h1>
    <p>Name: {{$member->name}}</p>
    <p>Surname: {{$member->surname}}</p>
    <p>ID Nr: {{$member->id_number}}</p>
    <p>Mobile Nr: {{$member->mobile_number}}</p>
    <p>Email: {{$member->email}}</p>
    <p>D.O.B: {{$member->date_of_birth}}</p>
    <p>Language:{{$member->language}}</p>
    <p>Created At: {{$member->created_at}}</p>
    <div class="page-header">
        <a href="{{action('MemberController@edit', $member->id)}}" class="btn btn-info">Edit</a>
    </div>
@endsection

Это мой файл миграции таблицы языков:

public function up()
    {
        Schema::create('languages', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('member_id')->unsigned();
            $table->string('name');
            $table->timestamps();
        });

        Schema::table('languages', function(Blueprint $table) {
            $table->foreign('member_id')->references('id')->on('members');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('languages', function(Blueprint $table) {
            $table->dropForeign('languages_member_id_foreign');
        });
        Schema::dropIfExists('languages');
    }

Это мой файл миграции таблицы участников:

public function up()
    {
        Schema::table('members', function (Blueprint $table) {
            $table->string('name');
            $table->string('surname');
            $table->string('id_number')->unique();
            $table->string('mobile_number');
            $table->string('email');
            $table->date('date_of_birth');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('members', function (Blueprint $table) {
            $table->dropColumn('name');
            $table->dropColumn('surname');
            $table->dropColumn('id_number')->unique();
            $table->dropColumn('mobile_number');
            $table->dropColumn('email');
            $table->dropColumn('date_of_birth');
        });
    }

И, наконец, моя модель члена:

class Member extends Model
{
    public function language() {
        return $this->hasMany('App\Language');//('Language') = name of the Language Model
    }
}

Куда я иду не так?

1 Ответ

0 голосов
/ 04 июня 2018

Причина, по которой вы видите представление объекта в формате JSON, заключается в том, что это все, что вы просите в своем коде, когда ставите {{$member->language}}.Это представляет весь App\Language объект.

Попробуйте вместо этого использовать {{$member->language->first()->name}}, чтобы указать, что вы запрашиваете только переменную name объекта.

Для отображения на всех языках, вам нужно перебрать коллекцию $member->language, используя:

@foreach ($member->language as $language)
    {{ $language->name }}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...