[英]Laravel Eloquent Relationship Filter by Column of Relationship
我有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);
如果你设置你的关系,如:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.