Laravel 5.3 belongsToMany返回null,pivot数据

时间:2017-01-19 14:08:27

标签: laravel orm eloquent laravel-5.3

我有下一个型号:

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'); 结果:

enter image description here

3 个答案:

答案 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')

您的论坛productspayment_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

这很神奇:)