2017-03-31 32 views
0

私は2つのテーブルを持っている:Laravel多対1の関係

orders 
-id 
-status_id 

status 
-id 
-label 

関係は次のとおりです。

任意の順序はどれ状況は、多くの受注

に属することができます1つの状態

public function status() 
{ 
    return $this->hasOne('App\Status'); 
} 

を持っています

public function orders() 
{ 
    return $this->belongsToMany('App\Order'); 
} 

私はそれがc orrect?

さて、私が使用している場合:

$o = Status::with('orders')->get(); 

私はすべての注文を取得します。 私が使用した場合:

$o = Order::with('status')->get(); 

私はエラーが発生します。 列が見つかりません:1054 'where句'の中の 'status.order_id'の列が不明です(SQL:select * from statusstatusorder_id in(1,2,3,4,5)) ステータスはありません.order_id代わりに、私はorder.status_idを持っています。

注文ステータスのラベルを取得するにはどうすればよいですか? の注文 - >ステータス - >ラベルのように?

答えて

2

1対多の関係にはhasManyを使用する必要があります。 belongsToでなければなりませんstatusため

public function orders() 
{ 
    return $this->hasMany('App\Order'); 
} 

機能:あなたの注文機能は次のようにする必要があります。

public function status() 
{ 
    return $this->belongsTo('App\Status'); 
} 

belongsToManyピボットテーブルと多対多の関係に使用されます。

+0

しかし、それは人間の言葉に翻訳されますか? "命令はステータスに属します。ステータスには多くの命令があります"?これは直感的ではありませんが、うまくいきます! – TheKitMurkit