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

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

报价表有 2 列:

primary(id), int(cid)

引用 catering.id。

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

最佳答案

你说过,我能做到

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

在您的餐饮模型中您拥有

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

看起来你在这里定义了一个不同的外键(cid)来使用它,而不是laravel基本上应该使用的默认外键,所以,执行相反的关系,您必须在 Offer 模型的 keeping 函数中执行相同的操作

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

关于php - Laravel 4,如何访问反向一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913560/

相关文章:

javascript - 如何使用 php 提交输入值,具体取决于基于下拉选择显示的输入值

PHP:open_basedir 允许的路径

php - 重新排列数组索引 Eloquent Laravel

php - Laravel 中如何避免列名冲突?

php - Laravel 4 - 将多个值插入数据透视表

php - 如何通过ajax删除laravel中的记录

php - 有没有办法从 SQL 查询返回绑定(bind)结果?

php - Laravel,没有 Shell Access 的转储自动加载

php - 除一种情况外的内连接

php - Laravel 使用 Mockery Eloquent 模型进行模拟