【问题标题】:Laravel proper approach to multiple hasOne for same modelLaravel 对同一模型的多个 hasOne 的正确方法
【发布时间】:2013-10-19 22:15:29
【问题描述】:

我有一个具有以下架构的carriages 表:

foreign: subsidiary_id
string: type
string: postal_code

还有一个subsidiaries 表,具有以下架构:

string: name
string: internal_reference
decimal: expedition_rate

现在,我将在 SubsidiariesController 中调整我的 store 函数,以便它会自动为该新子公司创建 2 个车厢。

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

我所知道的是,在我的 Subsidiary.php model 中,我可以像这样创建 2 个函数:

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

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

其中carriageExport 将是carriages.type = 'export'carriageImport 将是carriages.type = 'import'

所以,

  1. 我不知道,如果定义关系函数,是否已正确完成。你怎么看?我错过了一些东西,对吧?它是什么?
  2. 您更愿意坚持使用非关系版本吗?

【问题讨论】:

    标签: php orm laravel laravel-4 eloquent


    【解决方案1】:

    在这种情况下,范围是要走的路:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2017-05-31
      • 2013-12-02
      • 2016-02-21
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多