1

carriages次のアーキテクチャのテーブルがあります。

foreign: subsidiary_id
string: type
string: postal_code

そして、subsidiaries次のアーキテクチャを持つテーブル:

string: name
string: internal_reference
decimal: expedition_rate

ここで、SubsidiariesControllerのstore関数を調整して、新しい子会社用に 2 つの車両を自動的に作成するようにします。

子会社が作成された後、個々の作成手順に非常に簡単に進むことができますが、リレーションシップの方法をどのように使用できるか疑問に思っていました。

私が知っていることは、私のSubsidiary.php モデルでは次のような2つの関数を作成できるということです:

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

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

どこcarriageExportcarriages.type = 'export'、 にcarriageImportなりますcarriages.type = 'import'

そう、

  1. 関係関数の定義が適切に行われたかどうかわかりません。どう思いますか?私は何かが欠けていますよね?それは何ですか?
  2. 非リレーショナル バージョンに固執しますか?
4

1 に答える 1

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;
于 2013-10-12T14:54:25.123 に答える