与两个自定义字段雄辩的一对一关系

时间:2016-04-21 12:35:06

标签: laravel laravel-5 eloquent

我有两个应该具有一对一关系的表。 我知道Laravel会根据字段名称自动获取关系。但是如果它有所不同,我应该说明字段名称。所以我这样做但仍然 null 作为度假胜地。有人看到我看不到的东西吗?

表格op

id
operator
departure
arrival

表格op_parameters

id
price
unit

在我的操作系统

class Op extends Model

{

public function opParameter()
{
    return $this->hasOne('App\Model\OpParameter', 'id');
}

在我的opParameter控制器

   class OpParameter extends Model
{
    //
    public static $table = "op_parameters";

    /*
     *  One to one relation
     */
    public function op()
    {
        return $this->belongsTo('App\Model\Op', 'id');
    }
}

当我尝试转储像

这样的值时
dd(Op::find(1)->price);

它返回

  

可悲的是,我无法更改表名或字段。那似乎是什么问题?任何帮助都是适当的。

1 个答案:

答案 0 :(得分:2)

我相信你需要这样的东西,我假设op表上的运算符字段是对op_parameters表上id的引用(否则我看不到你可能用来链接这两个表的内容) )。

<?php
class Op extends Model {

    public function opParameter()
    {
        return $this->belongsTo('App\Model\OpParameter', 'id', 'operator');
    }
}
<?php
class OpParameter extends Model {

    protected $table = "op_parameters";

    public function op()
    {
        return $this->hasOne('App\Model\Op', 'operator');
    }
}
<?php
dd(Op::find(1)->opParameter->price);

你现在拥有的东西有几个问题。

首先,当您定义关系时,您没有指定您正在使用的自定义键。

其次,当您尝试通过您定义的关系来参考价格时,