Laravel 4, как получить обратное отношение «один ко многим»?

Код:

<?php class Catering extends \Eloquent { protected $table = 'catering'; public $timestamps = FALSE; public function offers() { return $this->hasMany('Offer', 'cid'); } } class Offer extends \Eloquent { protected $table = 'catering_offer'; public $timestamps = FALSE; public function catering() { return $this->belongsTo('Catering'); } } 

Я могу сделать

 $offers = Catering::find(1)->offers; 

но инверсия не работает:

 $catering = Offer::find(1)->catering; 

всегда возвращает NULL. База данных имеет правильные значения.

Таблица предложений имеет 2 столбца:

primary (id), int (cid)

что ссылки catering.id.

Вопрос: Как я могу получить доступ к обратной стороне этого отношения?

Вы сказали, что I am able to do

 $offers = Catering::find(1)->offers; 

и в вашей модели Catering вас есть

 public function offers() { return $this->hasMany('Offer', 'cid'); } 

Похоже, вы определили другой внешний ключ здесь ( cid ), чтобы использовать его вместо стандартного, который, как laravel должен использовать laravel , поэтому, чтобы сделать обратное отношение, вы должны сделать то же самое в функции catering модели Offer

 public function catering() { return $this->belongsTo('Catering', 'cid'); } 

В документации Laravel говорится, что вы можете переопределить обычный внешний ключ, передав второй аргумент методу hasMany , например

 return $this->hasMany('Offer', 'custom_key'); 

Точно так же, чтобы определить обратную связь на модели Offer , вы можете использовать метод belongsTo , например

 return $this->belongsTo('Catering', 'custom_key'); // cid