Laravel一对多关系试图获得非对象的属性

时间:2016-11-13 13:57:58

标签: php laravel model one-to-many

我正在建立Siswa(学生)和Kelas(班级)之间的关系模型,其中一个Kelas有很多学生(因此一对多)。这是代码:

Show.php视图

<tr>
    <th>Kelas</th>
    <td>{{$siswa->kelas->nama_kelas}}</td>
</tr>

Siswa.php模型

class Siswa extends Model
{
    protected $table = 'siswa';

    protected $fillable = [
        'nisn',
        'nama_siswa',
        'tgl_lahir',
        'jns_klmin',
        'id_kelas',
        'id_hobi',
    ];

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

Kelas.php模型

class Kelas extends Model
{
    protected $table = 'kelas';

    protected $fillable = [
        'nama_kelas'
    ];

    public function siswa(){
        return $this->hasMany('App\Siswa', 'id_kelas');
    }
}

我认为我已经相应地在模型Siswa中调用了方法kelas,但$ siswa-&gt; kelas-&gt; nama_kelas被定义为非对象。任何人都可以给予一些启发?任何帮助赞赏。

更新

这是节目控制器:

public function show(Siswa $siswa){
    return view('siswa.show', compact('siswa'));
}

在show参数中我使用路由模型绑定来查找在RouteServiceProvider中传递的$ id,我修改了它:

public function boot(Router $router)
{
    parent::boot($router);
    $router->model('siswa', 'App\Siswa');
}

public function map(Router $router)
{
    $router->group(['namespace' => $this->namespace, 'middleware' => 'web',
        ], function ($router) {
            require app_path('Http/routes.php');
        });
    //
}

1 个答案:

答案 0 :(得分:2)

belongsTo()方法将返回Illuminate\Database\Eloquent\Relations\BelongsTo个实例。要获得Kelas实例,您必须这样做:

$siswa->kelas->first()->nama_kelas

希望这有帮助!