Laravel雄辩关系按关系列过滤

时间:2016-06-14 18:59:35

标签: php mysql eloquent laravel-5.2

我有3张桌子

  

产品:[表]

     

人:[表]

     

付款:[表]

产品与人之间的多对多关系

产品与付款之间的一对多关系(一种产品有多种付款)

人与付款之间的一对多关系(一人有多付款)

Payment:[Table]
    id
    person_id
    product_id
    amount

问题在于,我试图通过person_id过滤所有人员的产品和产品付款。

原因是我不希望任何其他人记录付款。

这实际上是我正在运行的查询是的我知道它的错误因为我无法通过person_id过滤它。

$query = $person::with('product', 'payment')->where('is_active', 1);

我想实现这样的目标......

 $query = $person::with(array('product', 'payment' => function ($query) {
    $query->where('person_id', '=', 'person.id');
}))->where('is_active', 1);

1 个答案:

答案 0 :(得分:0)

如果您设置了以下关系:

class Person extends Model
{
    public function payments()
    {
        return $this->hasMany(Payment::class);
    }
}

class Payment extends Model
{
    public function product()
    {
        return $this->belongsTo(Product::class);
    }
}

然后你应该能够做到:

$person = Person::with('payments.product')->where('id',$personId)->where('is_active',1)->first();

这将返回加载了所有关系的Person,您可以访问以下内容:

@foreach($person->payments as $payment)
    {{$person->name}} bought {{$payment->product->name}} for {{$payment->amount}}
@endforeach