首页 > 解决方案 > Laravel 8:试图获取非对象错误的属性“名称”

问题描述

我正在使用 Laravel 8 开发我的论坛项目。所以我创建了一个名为 的表answers,这里是它的迁移:

public function up()
    {
        Schema::create('answers', function (Blueprint $table) {
            $table->id();
            $table->text('answer');
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->foreignId('question_id')->constrained()->onDelete('cascade');
            $table->timestamps();
        });
    }

然后为了建立Question模型和Answer模型之间的关系,我添加了这些:

问题.php:

public function answers()
    {
        return $this->hasMany(Answer::class);
    }

用户.php:

public function answers()
    {
        return $this->hasMany(Answer::class);
    }

之后,我添加了这个来显示问题信息:

@foreach($show->answers as $ans)
<table class="table table-striped table-bordered table-responsive-lg">
    <thead class="thead-light">
        <tr>
            <th scope="col"></th>
            <th scope="col">Answer</th>
        </tr>
    </thead>
    <tbody>
        <tr></tr>
        <tr>
            <td style="text-align:right">
                <div><span>Writer: </span><a href="">{{ $ans->id->name }}</a></div>
            </td>
            <td style="text-align:right">
                <p>
                    {{ $ans->answer }}
                </p>
            </td>
        </tr>
    </tbody>
</table>
 @endforeach

但现在我得到这个错误:

ErrorException 试图获取非对象的属性“名称”

那么这里出了什么问题呢?如何正确返回提出问题的用户的姓名?

如果您对此有任何想法或建议,我将不胜感激,

谢谢。

更新#1:

捕获

更新#2:

class Answer extends Model
{
    protected $fillable = ['answer', 'user_id', 'question_id'];

}

标签: phplaravellaravel-8

解决方案


您应该在 Answer 模型中建立 Answer an User 模型之间的关系:

class Answer extends Model
{
    protected $fillable = ['answer', 'user_id', 'question_id'];

   public function user()
    {
        return $this->belongsTo(User::class);
    }

  public function question()
    {
        return $this->belongsTo(Question::class);
    }
}

在您的刀片中,假设 $ans 是 Answer 模型的一个实例,您可以使用:

{{ $ans->user->name }}

推荐阅读