Связывание нескольких таблиц в Laravel с помощью Eloquent - PullRequest
1 голос
/ 02 марта 2020

У меня есть 3 таблицы пользовательских таблиц, таблица стран, таблица personal_details. Структура выглядит следующим образом:

Пользователи:

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('role');
    $table->string('email')->unique();
    $table->integer('terms');
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

Страны:

Schema::create('countries', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('countrycode');
    $table->string('countryname');
    $table->string('code');
    $table->string('flag');
    $table->timestamps();
});

Личные данные :

Schema::create('personal_details', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('user_id');
    $table->string('first_name');
    $table->string('last_name');
    $table->string('sex');
    $table->date('date_of_birth');
    $table->string('country');
    $table->string('freelancer_type');
    $table->text('about_me');
    $table->timestamps();
});

На странице приветствия мне нужно отобразить профили пользователей, включая страну и соответствующий флаг. Вот код, который я использую

Маршрут

Route::get('/', function () {
    $category = \App\Category::all();
    $user = \App\User::all()->where('role', '==', 'Freelancer');
    $post = \App\Post::paginate(3);
    return view('welcome', compact('category', 'user', 'post'));
});

и Просмотр

@foreach($user as $users)
<div class="col-lg-3 md-6 xs-6" style="text-align: center">
    <div class="card-deck">
        <div class="card shadow p-3 mb-5 bg-white rounded">
            <div class="card-body">
                <img src="/profile_images/{{$users->profileimage->image}}"
                     style="width: 100px; height: 100px; border-radius: 50%">
                <p><span style="font-weight: 900; color: #009dba">{{$users->personaldetails->first_name}} {{$users->personaldetails->last_name}}</span>
                    <br/>
                    <span style="font-size: 11px">
                          {{$users->expertise->profession}}</span>
                </p>
                <p style="font-size: 11px">{{$users->personaldetails->country}},
                    ZAR{{$users->expertise->hourly_rate}}/hr</p>
                <hr>
                <p style="font-size: 11px">{{str_limit($users->personaldetails->about_me, $limit = 80, $end =
                    '...')}}</p>
                {{$users->personaldetails->country->flag}}
                <div style="padding-top: 10px"></div>
                <a href="/users/{{$users->id}}">
                    <button>View Profile</button>
                </a>
            </div>
        </div>
    </div>
</div>
@endforeach

Я получаю Ошибка Попытка получить свойство 'flag' необъекта. Пожалуйста, помогите

1 Ответ

0 голосов
/ 02 марта 2020

В этой строке {{$users->personaldetails->country->flag}} вы вызываете данные relational. Ваши relational данные работают в цепочке. Сначала $user вызывает отношение personal_details таблицы. В таблице personal_details вы сохранили user_id, поэтому связь работает. Но когда вы объединяете в таблицу countries, используя personaldetails, не будет никакого результата, поскольку не существует никакой связи. Вы можете видеть, что ваша таблица countries содержит информацию только о стране, а id из personal_details не хранится как foreign key в вашей таблице countries. Если вы хотите получить данные через отношения, вы должны сохранить идентификатор таблицы personal_details как foreign key в таблице countries. Поэтому, если вы храните personal_detail_id в таблице стран, проблем не должно быть.

Ваша таблица countries должна выглядеть следующим образом:

Schema::create('countries', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('personal_detail_id');
        $table->string('countrycode');
        $table->string('countryname');
        $table->string('code');
        $table->string('flag');
        $table->timestamps();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...