私は次のモデルを持っていますforeachを持ってきますが、$ product-> paymentsはnullです。何故ですか ? すべてのテーブルが空ではありません。Laravel 5.3 belongsToManyリターンヌル、ピボットデータ
UPD サブクエリます$ this-> belongsToMany( 'アプリケーション\支払い'、 'payment_product'、 'PRODUCT_ID'、 'payment_id'); 結果:
私は次のモデルを持っていますforeachを持ってきますが、$ product-> paymentsはnullです。何故ですか ? すべてのテーブルが空ではありません。Laravel 5.3 belongsToManyリターンヌル、ピボットデータ
UPD サブクエリます$ this-> belongsToMany( 'アプリケーション\支払い'、 'payment_product'、 'PRODUCT_ID'、 'payment_id'); 結果:
試してみてください。
public function payments()
{
return $this->belongsToMany('App\Payment', 'payment_product', 'payment_id', 'product_id')
}
は、私はあなたが間違った順序であなたのFKを持っていると思います。あなたは関係のないフィールドに基づいて2つのテーブルを結合しているよう
public function payments()
{
return $this->belongsToMany('App\Payment')
}
OPは正しい順序を使用していますが、そうではありません。 –
私は公共機能の支払いを試みました{ $ this-> belongsToMany( 'App \ Payment'); } –
が見える:
は実際に、私はあなたがより多くのものを指定する必要はないと思います。
あなたはproducts
が
products.product_id = payment_product.payment_id
にpayment_product
とインナー参加します
return $this->belongsToMany('App\Payment', 'payment_product', 'product_id', 'payment_id')
あなたのテーブルを行うと。 しかし、私はこれらの2つの列は関連するキーではないと思います。代わりに、payment_product
にproducts.product_idを使用してこの表のproduct_id
に参加してください。 これはうまくいく可能性があります。
モデル支払と商品は$ primaryKey = 'id'を保護しています。 $ product = Product :: with( 'payments') - > find($ id); dd($ product-> relationsToArray();); 配列:1 [▼ "支払い" =>配列:2 [▼ 0 =>配列:7 [▶] 1 =>配列:7 [▶] ] ] 良好です。しかしforeach($ product-> payment to $ payment){...}、エラー:foreachの引数が無効です。 –
クエリは結果を返しません。 mysqlターミナルで同じraw sqlコマンドを実行し、そこに結果が得られているかどうかを確認してください。もしそうでなければ、おそらく間違って参加しているでしょう。 –
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
これは魔法です:)
だけFYI、あなたはlaravelの命名規則に従っているので、あなたの内のテーブル名/カラムを提供する必要はありません。関係。 –