虽然模型关系似乎合适,但试图在laravel 5.3应用程序中获取非对象的属性

时间:2017-01-12 00:17:17

标签: php laravel laravel-5 laravel-5.3

用户模型

class User extends Authenticatable{
    public function enrollments() {
        return $this->hasMany('App\enrollments','user_email');
    }
}

批量模型

class batch extends Model{
    protected $table = 'batch';
    public function enrollments() {
        return $this->hasMany('App\enrollments');
    }
}

注册模型

class enrollments extends Model{
    public function batch() {
        return $this->belongsTo('App\batch');
    }
    public function user() {
        return $this->belongsTo('App\User','email');
    }
}

如果我使用$ enrollment-> batch->标题,它可以工作.. 但如果我使用$ enrollment-> user-> name,则会出错

  

尝试获取非对象的属性

请帮忙,我被困住了 提前致谢

修改

问题出现后,我将用户和注册之间的外键从ID更改为电子邮件,并从user_id将我的列重命名为user_email。在此代码正常工作之前。

解决

遇到了问题,注册时的一些数据没有注册用户的电子邮件。

1 个答案:

答案 0 :(得分:0)

此代码仅会因为用户不是模型的子项而注意到工作。要解决此问题,您必须从Model延伸。 Authenticatableinterface,并且有一个等效的trait;没有这样的课程。

如果您希望您的用户类是Authenticatable,则必须实现该接口。但要回答您的问题,请扩展基本模型Model

   class User extends Model {
    public function enrollments() {
        return $this->hasMany('App\enrollments','user_email');
    }}

此外:

  

如果您需要将现有用户实例记录到您的应用程序中,   您可以使用用户实例调用login方法。给定的对象   必须是一个实现   照亮\合同\ Auth \ Authenticatable合同。当然,   Laravel附带的App \ User模型已经实现了这一点   接口:

https://laravel.com/docs/5.3/authentication