Laravel 5.8: 尝试获取 属性 'created_at' 的非对象

Laravel 5.8: Trying to get property 'created_at' of non-object

我正在使用 Laravel 5.8 开发我的项目,在这个项目中,我在 Member 模型和 [=17= 之间有一个 OneToMany 关系] 像这样的模型:

Student.php:

public function member()
    {
        return $this->belongsTo(Student::class, 'std_mbr_id');
    }

Member.php:

public function student()
    {
        return $this->hasOne(Student::class,'std_mbr_id');
    }

然后在控制器上,我添加了这个:

public function index()
    {
        $student = new Student();
        $students = $student->searchStudents()->paginate(20);
        $custom = new Student();
        $customs = $custom->all();
        return view('admin.students.custom', compact('students','customs'));
    }

现在在视图中我想获得 created_at 时间戳,如下所示:

$customs->find($student->mbr_id)->created_at

但这会return这个错误:

正在尝试获取 属性 'created_at' 的非对象

然而,当我 dd($customs->find($student->mbr_id)) 时,我可以正确获取时间戳:

那么在这种情况下如何访问 created_at 时间戳?

有很多可能抛出 `non-object 错误。

首先,请确保您已在 Student 模型中添加主键。

protected $primaryKey = 'std_id';

其次,如果您在 find() 方法中传递了错误的 $student->mbr_id 并直接访问特定列,它将引发错误:

请检查您的 blade 文件是否存在记录:

@if($customs->find($student->smbr_id))
    {{ $customs->find($student->smbr_id)->created_at }}
@endif

希望您理解并解决。

为什么不利用 Eloquent 动态关系 属性(参见 https://laravel.com/docs/8.x/eloquent-relationships#one-to-many-inverse)并使用

$student->member->created_at

find() 使用主键,在本例中为 std_id。所以要与另一个领域合作,你应该做

$customs->where('std_mbr_id', $student->mbr_id)->first()->created_at