Php 对于同一模型,采用适当的方法实现多个hasOne

Php 对于同一模型,采用适当的方法实现多个hasOne,php,orm,laravel,laravel-4,eloquent,Php,Orm,Laravel,Laravel 4,Eloquent,我有一个车厢表,其结构如下: foreign: subsidiary_id string: type string: postal_code string: name string: internal_reference decimal: expedition_rate 以及具有以下体系结构的子公司表: foreign: subsidiary_id string: type string: postal_code string: name string: internal_referenc

我有一个
车厢
表,其结构如下:

foreign: subsidiary_id
string: type
string: postal_code
string: name
string: internal_reference
decimal: expedition_rate
以及具有以下体系结构的
子公司
表:

foreign: subsidiary_id
string: type
string: postal_code
string: name
string: internal_reference
decimal: expedition_rate
现在,我将在子系统控制器中调整我的存储功能,以便它将自动为新的子系统创建两个车厢

我知道,在子公司创建之后,我可以很容易地进行个人创建步骤,但我想知道,如何使用关系方式

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

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

public function carriageImport()
{
    return $this->hasOne('Carriage');
}
其中
careexport
将是
carees.type='export'
,而
careeimport
将是
carees.type='import'

所以

  • 我不知道是否正确地定义了关系函数。你怎么认为?我错过了什么,对吗?这是什么
  • 你愿意坚持使用非关系型版本吗

  • 在这种情况下,作用域是解决问题的方法:

    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;