rackbeat/laravel-morph-where-has

Fix whereHas for morphTo relations.
61,345 7
Install
composer require rackbeat/laravel-morph-where-has
Latest Version:2.0
PHP:>=7.1
License:MIT
Last Updated:Nov 26, 2022
Links: GitHub  ·  Packagist
Maintainer: lasserafn

Use whereHas for morphed relationships in Laravel

Usually, you cant say whereHas('contact') if contact is a morphTo relationship. This package aims to fix that.

Installation

You just require using composer and you're good to go!

composer require rackbeat/laravel-morph-where-has

The Service Provider is automatically registered.

Usage

1. Add possible variations in your model

The problem, is that the morph relationship can have a hard time determining how to handle the whereHas call.

Our solution, is that you define every possible morphed class. Like so:

<?php

class Invoice extends Model {
    // Old morph relation
    public function owner() {
        return $this->morphTo('owner'); 
    }
    
    // New solution
    public function customer() {
        return $this->morphTo('owner')->forClass(App\Customer::class);
    }
    
    public function supplier() {
        return $this->morphTo('owner')->forClass(App\Supplier::class);
    }
}

2. Use whereHas

Invoice::whereHas('supplier', function($query) {
    $query->whereName('John Doe');
})->get();

This will correctly query a relation with the type and any queries you've added.

Requirements

  • PHP >= 7.1

Inspiration

Solution based upon work by github@thisdotvoid - modified to fix some common issues.

Related Packages

sarfraznawaz2005/indexer

Laravel package to monitor SELECT queries and offer best possible INDEX fields.

2,737 56
zara-4/laravel-lazy-mysql

A lazy mysql based Eloquent model and Query builder for Laravel

7,985 10
phoenixgao/laravel-postgres-extended-schema

Laravel database schema extended, added some PostgreSql features

2,250 6
caloskao/migrate-specific

Easily perform database migrations of specific migration files in the Laravel fr...

15,991 7