2014-09-21 5 views
0

Я пытаюсь использовать hasManyThrough отношения для первого раза. Но когда я пытаюсь вызвать метод, он ничего не возвращает.Laravel hasManyThrough ничего не возвращает

Вот моя база данных:

User: 
- id 
- (...) 

Shipment: 
- id 
- users_id 
- (...) 

Shipment_question: 
- id 
- shipment_id 
- (...) 

А вот код моей модели.

Пользователь:

public function Shipment() 
{ 
    return $this->hasMany('Shipment','users_id'); 
} 

public function Shipment_question(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

Пересылка:

public function User() 
{ 
    return $this->belongsTo('User','users_id'); 
} 

public function Shipment_question() 
{ 
    return $this->hasMany('Shipment_question','shipment_id'); 
} 

Shipment_question:

public function Shipment() 
{ 
    return $this->belongsTo('Shipment','shipment_id'); 
} 

И вот звонок:

Auth::User()->Shipment_question; 

Я использую debugbar barryvdh для просмотра запросов, вызов shipment_question должен генерировать запрос, но в журнале запросов появляется запрос auth :: user.

ответ

1

отношения для того, чтобы работать в качестве динамических свойств, должны быть camelCased, так переименовывать:

public function Shipment_question(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

//to 
public function shipmentQuestion(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

тогда вы сможете назвать:

Auth::user()->simpmentQuestion; 

иначе единственный способ, которым Вы можете работа с ним вызывает его непосредственно в качестве метода:

Auth::User()->Shipment_question()->getResults(); 

// what gives the same result as dynamic property after fix: 
Auth::User()->shipmentQuestion; 

В общем, соглашения о присвоении имен Laravel4 + (например, выше или, по крайней мере, предлагают другие случаи), используя методы и свойства camelCased и классы StudlyCased.

Поэтому я предлагаю переименовать ваш класс Shipment_question в ShipmentQuestion.

+0

Невероятно, что решает проблему. Я полагаю, что конвенция camelCased была только той, конвенцией, а не функциональным аспектом laravel. Спасибо. – JRivera294

+1

В общем, это просто конвенция. Однако в этом случае, когда вы используете функцию Eloquent, вам просто нужно знать, как это работает. –