laravel为用户错误设置配置文件页面此集合实例上不存在属性[user]

时间:2018-11-14 17:13:25

标签: php laravel laravel-5.7

我正在尝试建立一个页面,用户可以在该页面上添加关于自己的描述,例如,他或她所从事的兴趣是什么,因此我与用户创建了一个单独的表,因此有一个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 :(得分:0)

就像Vahe Shak已经提到的那样,您的个人资料表需要一个外键来显示user_id与users表中的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 migration