Laravel 4,如何获得反向的一对多关系?

时间:2013-09-20 09:43:10

标签: php laravel laravel-4 eloquent

代码:

<?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。数据库具有正确的值。

优惠表有两列:

  

primary(id),int(cid)

引用了catering.id。

问题: 我怎样才能访问这种关系的反面?

1 个答案:

答案 0 :(得分:2)

你这么说,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 Documentation中,它表示,您可以通过将第二个参数传递给hasMany方法来覆盖传统的外键,例如

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

同样,要在Offer模型上定义关系的倒数,您可以使用belongsTo方法,例如

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