2017-01-19 15 views
0

私は次のモデルを持っていますforeachを持ってきますが、$ product-> paymentsはnullです。何故ですか ? すべてのテーブルが空ではありません。Laravel 5.3 belongsToManyリターンヌル、ピボットデータ

UPD サブクエリます$ this-> belongsToMany( 'アプリケーション\支払い'、 'payment_product'、 'PRODUCT_ID'、 'payment_id'); 結果:

enter image description here

+3

だけFYI、あなたはlaravelの命名規則に従っているので、あなたの内のテーブル名/カラムを提供する必要はありません。関係。 –

答えて

1

試してみてください。

public function payments() 
{ 
    return $this->belongsToMany('App\Payment', 'payment_product', 'payment_id', 'product_id') 
} 

は、私はあなたが間違った順序であなたのFKを持っていると思います。あなたは関係のないフィールドに基づいて2つのテーブルを結合しているよう

public function payments() 
{ 
    return $this->belongsToMany('App\Payment') 
} 
+0

OPは正しい順序を使用していますが、そうではありません。 –

+0

私は公共機能の支払いを試みました{ $ this-> belongsToMany( 'App \ Payment'); } –

1

が見える:

は実際に、私はあなたがより多くのものを指定する必要はないと思います。

あなたはproducts
products.product_id = payment_product.payment_idpayment_productとインナー参加します

return $this->belongsToMany('App\Payment', 'payment_product', 'product_id', 'payment_id') 

あなたのテーブルを行うと。 しかし、私はこれらの2つの列は関連するキーではないと思います。代わりに、payment_productにproducts.product_idを使用してこの表のproduct_idに参加してください。 これはうまくいく可能性があります。

+0

モデル支払と商品は$ primaryKey = 'id'を保護しています。 $ product = Product :: with( 'payments') - > find($ id); dd($ product-> relationsToArray();); 配列:1 [▼ "支払い" =>配列:2 [▼ 0 =>配列:7 [▶] 1 =>配列:7 [▶] ] ] 良好です。しかしforeach($ product-> payment to $ payment){...}、エラー:foreachの引数が無効です。 –

+0

クエリは結果を返しません。 mysqlターミナルで同じraw sqlコマンドを実行し、そこに結果が得られているかどうかを確認してください。もしそうでなければ、おそらく間違って参加しているでしょう。 –

0

payments_methodへの支払いの名前を変更します。

public function payments_method(){ 
    return $this->belongsToMany('App\Payment'); //or ('App\Payment', 'payment_product', 'payment_id', 'product_id') 
} 

$product = Product::find($id); 
$product->payments_method; //this is work 

これは魔法です:)