laravel настройка страницы профиля для пользователей error Свойство [user] не существует в этом экземпляре коллекции - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать страницу, где пользователь может добавить описание о себе, например, какие хобби ему или ей интересны, поэтому я сделал отдельную таблицу из пользователей, поэтому есть таблица USER и PROFILE.таблица, как обе таблицы выглядят

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

 public function up()
 {
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

таблица профиля

 public function up()
 {
    Schema::create('profiles', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->string('email')->unique();
        $table->string('firstname');
        $table->string('lastname');
        $table->integer('age');
        $table->integer('birthdate');
        $table->text('bio');
        $table->timestamps();
    });
}

, поэтому в моих моделях я устанавливаю отношение к профилю и пользователю.Функция belognsto () в laravel и hasone () так выглядит модель

user.php

public function profile()

{

    return $this->hasOne(Profile::class);

}

profile.php

public function user()

{

    return $this->belongsTo(User::class);

}

но я получаю ошибкукогда я пытаюсь добавить это к лезвию, например,

  {{ $profile->user }}

, он говорит, что переменная не может быть найдена, поэтому я не установил отношения кораблей прямо в laravel, чтобы он выдавал ошибку, или это что-то еще

ошибка: [Свойство [пользователь] не существует в этом экземпляре коллекции.]

ProfileController.php

public function index()

{
    $profile = Profile::all();

    return view ('profile.show',compact('profile'));

}

1 Ответ

0 голосов
/ 14 ноября 2018

Как уже упоминал Вахе Шак, вашей таблице профиля нужен внешний ключ, чтобы показать, что user_id связан с id в таблице пользователей. Для переноса таблицы вашего профиля необходимо:

$table->integer('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

Но редактирование миграции не будет эффективно вносить изменения. Использовать новую миграцию

php artisan make:migration add_foreign_to_profile

Тогда миграция должна выглядеть так:

public function up()
{
    Schema::table('profiles', function(Blueprint $table)
    {
         $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

public function down()
{
    Schema::table('profiles', function(Blueprint $table)
    {
        $table->dropForeign('user_id'); 
    });
}

Тогда вы можете запустить php artisan migrate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...