Error Trying to get property of non-object

Saya mau tanya, saya sdg mencoba membuat website sistem informasi akademik. Disana ada tabel siswa yang sudah diisi biodata lengkap seperti nama, nis, tanggal lahir, foto dsb. Untuk user saya coba pakai migrasi awal dari laravel yaitu user_table. Saya mau menampilkan data siswa sesuai Author user yg login berdasarkan kesamaan NIS, saya sudah coba relasi one to many di laravel (Karena saya mau ada user siswa & orang_tua yg mempunyai satu data siswa). Tapi ketika saya coba menampilkan datanya saya mendapatkan error:

Ini Model User (User.php) & user table saya:

 <?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $table = 'users';

    protected $fillable = [
        'nis_siswa','name', 'email', 'password','level'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function siswa() {
        return $this->belongsTo('App\Siswa', 'nis_siswa');
    }
}
 <?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nis_siswa', 4);
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->rememberToken();
            $table->enum('level', ['admin', 'guru', 'siswa']);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

Ini Model Siswa (Siswa.php) & siswa table saya:

 <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Siswa extends Model
{
    protected $table = 'siswa';
    protected $dates = ['tanggal_lahir'];
    protected $fillable = [
        'nis',
        'nama_siswa',
        'tanggal_lahir',
        'jenis_kelamin',
        'id_kelas',
        'foto',
    ];

    public function getNamaSiswaAttribute($nama_siswa) {
        return ucwords($nama_siswa);
    }

    public function telepon() {
        return $this->hasOne('App\Telepon', 'id_siswa');
    }

    public function kelas() {
        return $this->belongsTo('App\Kelas', 'id_kelas');
    }

    public function user() {
        return $this->hasMany('App\User', 'nis_siswa');
    }

    public function scopeKelas($query, $id_kelas)
    {
        return $query->where('id_kelas', $id_kelas);
    }

    public function scopeJenisKelamin($query, $jenis_kelamin)
    {
        return $query->where('jenis_kelamin', $jenis_kelamin);
    }
}

 <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Siswa extends Model
{
    protected $table = 'siswa';
    protected $dates = ['tanggal_lahir'];
    protected $fillable = [
        'nis',
        'nama_siswa',
        'tanggal_lahir',
        'jenis_kelamin',
        'id_kelas',
        'foto',
    ];

    public function getNamaSiswaAttribute($nama_siswa) {
        return ucwords($nama_siswa);
    }

    public function telepon() {
        return $this->hasOne('App\Telepon', 'id_siswa');
    }

    public function kelas() {
        return $this->belongsTo('App\Kelas', 'id_kelas');
    }

    public function user() {
        return $this->hasMany('App\User', 'nis_siswa');
    }

    public function scopeKelas($query, $id_kelas)
    {
        return $query->where('id_kelas', $id_kelas);
    }

    public function scopeJenisKelamin($query, $jenis_kelamin)
    {
        return $query->where('jenis_kelamin', $jenis_kelamin);
    }
}

Berikut kode view bladenya:

 @extends('template')

@section('main')
    <div id="profile">
        <h2>Detail Profile</h2>

        <table class="table table-striped">
            <tr>
                <th>nis</th>
                <td>{{ Auth::user()->nis_siswa }}</td>
            </tr>
            <tr>
                <th>Nama</th>
                <td>{{ Auth::user()->name }}</td>
            </tr>
            <tr>
                <th>Tanggal lahir</th>
                <td>{{ Auth::user()->siswa->tanggal_lahir }}</td>
            </tr>
        </table>
    </div>
@stop

@section('footer')
    @include('footer')
@stop

Dilihat dari kode diatas, saya mencoba meretrive tanggal lahir dari tabel siswa sesuai dengan Auth yg login, tetapi error

Kasus saya hampir mirip dengan ini: <a href='https://laracasts.com/discuss/channels/general-discussion/ getting-authuser-relations-from-the-view'>https://laracasts.com/discuss/channels/general-discussion/ getting-authuser-relations-from-the-view</a> namun saya sudah coba hal yg sama tp ttp gagal

avatar forces19
@forces19

3 Kontribusi 1 Poin

Diperbarui 6 tahun yang lalu

5 Jawaban:

Coba tampilkan juga bagian view bladenya gan, karena datanya ada yang salah disana ,btw kode dimasukin di tag kode ya gan.

avatar hilmanski
@hilmanski

2665 Kontribusi 2131 Poin

Dipost 6 tahun yang lalu

@hilmanrdn sudah gan

avatar forces19
@forces19

3 Kontribusi 1 Poin

Dipost 6 tahun yang lalu

hmm sepertinya logika dasar buat relationnya ada yang salah gan. Kalau agan cuma punya dua user role berbeda, bikinnya gini gan: 1. user (/siswa: bisa pake table users yang datang dari laravel) 2. parent (orang tua user/siswa)

cukup dua ini aja gan tablenya: nanti di user pake belongsTo di parent pake hasOne

avatar hilmanski
@hilmanski

2665 Kontribusi 2131 Poin

Dipost 6 tahun yang lalu

@hilmanrdn sebenernya saya buat ada 4 user gan (Admin, Guru, Siswa, Orangtua_siswa), nah didalemnya ada tabel data siswa, telepon, kelas, nilai & jadwal, kira2 relasinya yg enak bagaimana ya gan?

avatar forces19
@forces19

3 Kontribusi 1 Poin

Dipost 6 tahun yang lalu

Relation itu simplenya gimana hubungan satu table ke table lain. Pada kasus ini "admin" ngga perlu ada relasi karena ngga ada hubungannya. Sisanya sesuai dengan kegunaan aslinya. 1. Guru bisa punya banyak murid, murid bisa punya banyak guru. Berarti: sama sama many to many

2 Orangtua siswa sama seperti komentar sebelumnya

avatar hilmanski
@hilmanski

2665 Kontribusi 2131 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban