Skip to content

Product::items relationship does not work with doesntHave #34

Description

@f-liva
// \App\Models\User
class User extends \Corcel\Model\User {
    use \Corcel\WooCommerce\Traits\HasRelationsThroughMeta;

    public function products()
    {
        return $this
            ->hasManyThroughMeta(\Corcel\WooCommerce\Model\Product::class, 'prod_users', 'post_ID', 'ID')
            ->doesntHave('items');
    }
}

Calling $user->products, the NOT EXISTS sql clause queries the table wppl_woocommerce_order_items instead of wppl_woocommerce_order_itemmeta, generating this error: https://flareapp.io/share/Bm0BLkJ7#F73

This my current workaround to get everything work correctly:

// \App\Models\Corcel\Item
class Item extends \Corcel\WooCommerce\Model\Item
{
   protected $table = 'woocommerce_order_itemmeta';
}

// \App\Models\Corcel\Product
class Product extends \Corcel\WooCommerce\Model\Product
{
    public function items(): HasMany
    {
        return $this->hasManyThroughMeta(Item::class, '_product_id', 'order_item_id', 'order_item_id');
    }
}

// \App\Models\User
class User extends \Corcel\Model\User {
    use \Corcel\WooCommerce\Traits\HasRelationsThroughMeta;

    public function products()
    {
        return $this
            ->hasManyThroughMeta(\App\Models\Corcel\Product::class, 'prod_users', 'post_ID', 'ID')
            ->doesntHave('items');
    }
}

Is this a bug or am I just not understanding something?

I need to build the relationship to get only products, never purchased, related to a specific user via meta prod_users.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions