Home > Blockchain >  how to implement 3 nested subquery with 3 model in laravel?
how to implement 3 nested subquery with 3 model in laravel?

Time:07-14

I have 3 model Transaction , Cart , Acceptedcart.

in Cart model I have transaction_id and in Acceptedcart model have cart_id.

how can I find transactions where acceptedcart->delivered == true ?

can I write that like this ?

$transactions = Transaction::whereIn('id',function ($query) {
        return Cart::whereIn('id' , function($subquery){
            return AcceptedCart::where('delivered' , false)->pluck('cart_id');
        })->pluck('transaction_id');
    })->get();

or :

$transactions = Transaction::whereIn('id' , function($query){
        $query->select('transaction_id')->from('carts')->whereIn('id' , function($subquery){
            $subquery->select('cart_id')->from('accepted_carts')->where('delivered' , true);
        });
    })->get();

thanks.

CodePudding user response:

in Transaction.php your relationship to carts:

public function carts()
{
    return $this->hasMany(Cart::class);
}

in Cart.php you relationship to accepted carts:

public function accepted_carts()
{
    return $this->hasMany(Acceptedcart::class);
}

And the query to get the transactions where acceptedcart->delivered == true:

$transactions = Transaction::whereHas('carts.accepted_carts', function ($query) {
    $query->where('delivered', true);
})->get();
  • Related