Laravel适用于同一模型的多个hasOne方法

时间:2013-10-11 18:22:17

标签: php orm laravel laravel-4 eloquent

我有一个carriages表,其中包含以下架构:

foreign: subsidiary_id
string: type
string: postal_code

subsidiaries表,具有以下架构:

string: name
string: internal_reference
decimal: expedition_rate

现在,我即将在 SubsidiariesController 中调整我的商店功能,以便它自动为该新子公司创建2个车厢。

我知道,在创建子公司之后,我可以非常轻松地进行个别创建步骤,但我想知道如何使用关系方式?

我所知道的是,在我的Subsidiary.php 模型中,我可以创建两个函数,如下所示:

public function carriageExport()
{
    return $this->hasOne('Carriage');
}

public function carriageImport()
{
    return $this->hasOne('Carriage');
}

其中carriageExportcarriages.type = 'export'carriageImportcarriages.type = 'import'

所以,

  1. 我无法弄清楚,如果定义关系函数,已经正确完成了。你怎么看?我错过了什么,对吧?它是什么?
  2. 您是否愿意坚持使用非关系版本?

1 个答案:

答案 0 :(得分:3)

在这种情况下,范围是可行的方法:

class Subsidiary extends Eloquent {

    public function carriage()
    {
        return $this->hasOne('Carriage');
    }

}

class Carriage extends Eloquent {

    public function scopeImport($query)
    {
        return $query->whereType('import');
    }

    public function scopeExport($query)
    {
        return $query->whereType('export');
    }

}

然后你可以:

echo Subsidiary::find(1)->carriage()->import()->first()->postal_code;