我有下一个型号:
class Product extends Model{
protected $table = 'products';
public function payments()
{
return $this->belongsToMany('App\Payment', 'payment_product', 'product_id', 'payment_id')
}
}
class Payment extends Model{
protected $table = 'payments';
public function products(){
return $this->belongsToMany('App\Product');
}
}
数据透视表:payment_product(id,product_id,payment_id)
锋
public function details($id){
$product = Product::with('payments')->find($id);
dd($product->payments); // return null
return view('products.details', ['product' => $product]);
}
我需要引入foreach,但$ product->付款为空。这是为什么 ? 所有表都不是空的。
UPD 子查询$ this-> belongsToMany('App \ Payment','payment_product','product_id','payment_id'); 结果:
答案 0 :(得分:1)
尝试:
public function payments()
{
return $this->belongsToMany('App\Payment', 'payment_product', 'payment_id', 'product_id')
}
我认为你的FK顺序错误。
事实上,我认为您不需要指定任何内容:
public function payments()
{
return $this->belongsToMany('App\Payment')
}
答案 1 :(得分:1)
看起来您正在根据不相关的字段加入两个表。
当你这样做时
return $this->belongsToMany('App\Payment', 'payment_product', 'product_id', 'payment_id')
您的论坛products
与payment_product
内联
products.product_id = payment_product.payment_id
。
但我认为这两列不是相关的键。相反,在payment_product
中,使用products.product_id加入此表中的product_id
。
那可能有用。
答案 2 :(得分: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
这很神奇:)