繁体   English   中英

Laravel雄辩关系按关系列过滤

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM