Laravel 4,如何访问反向一对多关系


Laravel 4, how to access reverse one-to-many relation?

代码:

<?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