2015-11-02 79 views
1

我在Laravel 5.工作我的情况是下一个:我有一个表USERS和一张桌子PROFILES的有关系1:1。所以,我在模型用户一个名为轮廓像这样的方法:错误试图让非对象的属性在Laravel 5关系和范围

public function profile(){  
     return $this->belongsTo('App\models\Profile','profile_id'); 
    } 

另外我有一个方法scopeData在这里我要过滤哪些用户有identity_doc等于为数据

public function scopeData($query,$data){ 
     $profile=$this->profile; 
     $query->where($profile->identity_doc,$data); 
    } 
在我使用范围功能在这条线的用户控制器

$students= Users::data($request->get('data'))->where('rol','=','Student')->get(); 

但是,当我运行它时,我有这个错误:试图获得非对象的属性 所以,为什么会发生?轮廓方法在其他功能工作正常,但没有在这里,我得到:

**array('query' => object(Builder), 'data' => 'example', 'profile' => null))** 

回答

1

如果我的口才ORM的记错的话,当你使用它增加了查询的范围,这意味着你在构建查询的过程中,您还没有实际查询数据库。但是,关系(例如->belongsTo(...))似乎适用于实例化的对象 - 即它们在之后工作,您已完成从数据库中获取它们的操作。

因此,在您的范围内,您的用户实际上并不存在。 $this不是您范围内的用户,因此$this->profile不会返回任何内容 - 查询尚未运行,因此它没有用户,因此也可能没有配置文件。那么,因为$profile为空,访问$profile->indentity_doc将导致你得到的错误。

+0

好吧,我明白了,我虽然一样,但我不确定。谢谢你,兄弟!那么,是否存在处理这种情况的方法?我如何使用范围内的关系? –

+0

好好加载可能是您解决方案的一部分:http://laravel.com/docs/5.0/eloquent#eager-loading。 例如Users :: with('profile') - 至少可以让你在某个地方。我并不完全清楚你想用 - > identity_doc部分实现的目标。你能解释更多吗? – Octo

+0

当然,问题是我在视图中有一张桌子,并且在那里显示了用户个人资料的一些数据,如姓名,身份证件,电话号码等。但是我有一个_input text_,用户可以在其中引入一些价值并找到重合的寄存器,他可以找到护照或身份证号码。然后用那个_data_我试图过滤寄存器,并向用户显示结果 –

相关问题