2015-11-02 4 views
1

Я работаю в Laravel 5. Моя ситуация следующая: У меня есть таблица ПОЛЬЗОВАТЕЛЕЙ и столом ПРОФИЛИ Имеют отношение 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

Если моя память красноречивый ОРМ поделом мне, когда вы используете сферу это добавление к запросу, то есть вы в процессе построения запроса, и вы еще не запросили базу данных. Однако отношения (например, ->belongsTo(...)), по-видимому, работают над экземплярами объектов, т. Е. Работают после, которые вы закончили получать из базы данных.

Так что в то время вашей области действия ваш пользователь на самом деле не существует. $this не является пользователем в вашей области видимости, поэтому $this->profile ничего не возвращает - запрос еще не запущен, поэтому у него нет пользователей, поэтому у него тоже нет профилей. Итак, поскольку $profile имеет значение null, доступ к $profile->indentity_doc приведет к этой ошибке.

+0

ОК, я понимаю, я, хотя и тот же, но я не был уверен. Спасибо, мужик! Итак, существует ли способ справиться с подобными ситуациями? как я использую отношения внутри области? –

+0

Желаемая загрузка, вероятно, является одной из частей вашего решения: http://laravel.com/docs/5.0/eloquent#eager-loading. , например. Пользователи :: с («профиль») - это по крайней мере доставит вас куда-нибудь. Я не совсем понимаю, чего вы пытаетесь достичь с помощью части -> identity_doc. Не могли бы вы объяснить больше, пожалуйста? – Octo

+0

уверен, дело в том, что у меня есть таблица в представлении, и там я показываю некоторые данные профиля пользователя, такие как имя, идентификационный документ, номер телефона и т. Д. Но у меня есть _входной текст_, где пользователь может ввести некоторую ценность и найти регистры, которые совпадают, он может найти номер паспорта или удостоверения личности. а затем с этим _data_ Я пытаюсь отфильтровать регистры и показать результат пользователю –

Смежные вопросы