我有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);
答案 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