Estoy usando Laravel 5.8 para desarrollar mi proyecto y en este proyecto, tengo una relación OneToMany entre el modelo de Member y el modelo de Student como esta:
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'); }Luego, en el controlador, agregué esto:
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')); } Ahora, en la vista, quiero obtener created_at timestamp de esta manera:
$customs->find($student->mbr_id)->created_at
Pero esto devolverá este error:
Intentando obtener la propiedad 'created_at' de un no objeto
Sin embargo, cuando hago dd($customs->find($student->mbr_id)) , puedo obtener correctamente las marcas de tiempo:
Entonces, ¿cómo acceder a la marca de tiempo created_at en esta situación?
Hay muchas posibilidades de arrojar `errores no relacionados con el objeto.
En primer lugar, asegúrese de haber agregado la clave principal en el modelo de Student .
protected $primaryKey = 'std_id';
En segundo lugar, si pasó mal $student->mbr_id en el método find() y accedió directamente a columnas específicas, arrojará un error:
Por favor verifique en su archivo blade si existe registro o no:
@if($customs->find($student->smbr_id)) {{ $customs->find($student->smbr_id)->created_at }} @endifEspero que lo entiendas y lo soluciones.
¿Por qué no aprovechar la propiedad de relación dinámica de Eloquent (consulte https://laravel.com/docs/8.x/eloquent-relationships#one-to-many-inverse ) y usar
$student->member->created_atfind() funciona con la clave principal, que es std_id en este caso. Entonces, para trabajar con otro campo, debes hacer
$customs->where('std_mbr_id', $student->mbr_id)->first()->created_at