代码:
<?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
基本上应该使用的默认外键,因此,要执行反向关系,您必须在Offer
模型的catering
函数中执行相同的操作
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