Код:
<?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