Downloads
Stars
Version
Usually, you cant say whereHas('contact')
if contact
is a morphTo relationship. This package aims to fix that.
You just require using composer and you're good to go!
composer require rackbeat/laravel-morph-where-has
The Service Provider is automatically registered.
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);
}
}
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.
Solution based upon work by github@thisdotvoid - modified to fix some common issues.