2017-01-03 5 views
0

私は、Header、Details、Itemという3つのモデルを持っています。 ヘッダIDをCUSTOMER_ID、詳細を有するを有するIDheader_id(FOREIGN KEY)、及びITEM_ID(FOREIGN KEY)、アイテムたID 。今、私はララベルの雄弁な関係を使ってそのテーブルを関連づけたいと思います。私はそれを行うことができました:Eloquent:Laravelの3つのテーブルとの関係5

class Details extends Model 
{ 
    public function item() { 
     return $this->belongsTo('App\Item', 'bill_item_id'); 
    } 

    public function header() { 
     return $this->belongsTo('App\Header', 'header_id'); 
    } 
} 

問題は私のコントローラにありますが、詳細を知りたいのですが詳細にcustomer_idがありません。

$detail = Details::where('customer_id', $id)->get(); 
$detail->load('header', 'item'); 

customer_idフィールドはヘッダーモデルにあります。すべての詳細が得られればうまくいきますが、特定の顧客を獲得したいと考えています。

+0

あなたはまだ関係タイプ(別名:oneToMany、oneToOne、manyToMany ...)を宣言しなければならないと思います。詳細については、公式のsyte:https://laravel.com/docs/5.3/eloquent-relationshipsを参照してください。 – avilac

答えて

2

これは結果があなたの関係に依存してしまいます。この

$details = Details::with('header')->where('customer_id', $id)->get(); 

OR

$details = Details::with(['header'=>function($query) use ($id){ 
    $query->where('customer_id', $id); 
}])->get() 

のようなあなたのコードを記述します。

+0

もう1つは働いています。コードを説明できますか?私はそれを得ていない。 –

+0

確かに function関数名または配列としての文字列の取得arrayのキーがモデル内の関数名で、2番目のパラメータが関数<$query>の現在のクエリ文を注入する関数であり、 、...あなたの関数が関連するモデルにこの条件をバインドします。 この例では、App \ Headerモデルのwhere条件をバインドします。 –

+0

function($ query)$ idをその関数内で使用できるようにするuse($ id)。 –

0

あなたのために使用できる場所に関してフィールド

詳細::([ 'ヘッダ' =>関数($クエリ)を使用する($ ID)と、{$ query->を有する場合( 'CUSTOMER_ID'、 $ id);}]) - > get();

関連する問題