2017 © Pedro Peláez
 

library improved-polymorphic-eloquent-builder

Attempting to use whereHas queries with standard Eloquent polymorphic relationships will fail, due to Eloquent being unable to determine the correct model to retrieve. The 'Improved Polymorphic Eloquent Builder' is a class which extends the Eloquent Builder class that is built in to Laravel 5.1. It enables limited use of the whereHas method to query Eloquent polymorphic relationships.

image

rapidwebltd/improved-polymorphic-eloquent-builder

Attempting to use whereHas queries with standard Eloquent polymorphic relationships will fail, due to Eloquent being unable to determine the correct model to retrieve. The 'Improved Polymorphic Eloquent Builder' is a class which extends the Eloquent Builder class that is built in to Laravel 5.1. It enables limited use of the whereHas method to query Eloquent polymorphic relationships.

  • Thursday, March 1, 2018
  • by DivineOmega
  • Repository
  • 1 Watchers
  • 9 Stars
  • 822 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 0 % Grown

The README.md

Improved Polymorphic Eloquent Builder

Packagist, (*1)

Attempting to use whereHas queries with standard Eloquent polymorphic relationships will fail, due to Eloquent being unable to determine the correct model to retrieve. You may receive an error similar to the one below as Eloquent tries to build the query using columns from the model without including its table name., (*2)

QueryException in Connection.php line 662:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'column_name' in 'where clause'

The 'Improved Polymorphic Eloquent Builder' is a class which extends the Eloquent Builder class that is built in to Laravel 5.1. It enables limited use of the whereHas method to query Eloquent polymorphic relationships., (*3)

Requirements

You must be using Laravel 5.1 as your framework and Eloquent as your ORM., (*4)

Installation

Simply require this package, using Composer, in the root directory of your project., (*5)

composer require rapidwebltd/improved-polymorphic-eloquent-builder

Then change any Eloquent models using polymorphic relationships to extend the \RapidWeb\ImprovedPolymorphicEloquentBuilder\Model class. This will usually be any model(s) containing methods which return morphTo() relationship(s). An example class is shown below., (*6)

class Variation extends \RapidWeb\ImprovedPolymorphicEloquentBuilder\Model
{
  public function model()
  {
    return $this->morphTo();
  }
}

Usage

When performing a whereHas query, you must specify the morph types as the 5th argument. Morph types refers to an array of the polymorphic types you wish to filter by. These should be presented as strings equal to one or more of the possible values the [...]_type field of the polymorphic relationship in question., (*7)

The example below selects all variation records that have related model record of type bags, with a brand_id of 2., (*8)

Variation::whereHas('model', function($query) use ($brandId) {
  $query->where('brand_id', 2);
}, '>=', 1, ['bags'])->get();

A database structure for this example would be similar to the following. The polymorphic fields are highlighted in bold., (*9)

variations bags sunglasses
id id id
model_type ('bags', 'sunglasses', etc.) brand_id brand_id
model_id material_id lens_colour_id

The Versions

01/03 2018

dev-master

9999999-dev https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Attempting to use whereHas queries with standard Eloquent polymorphic relationships will fail, due to Eloquent being unable to determine the correct model to retrieve. The 'Improved Polymorphic Eloquent Builder' is a class which extends the Eloquent Builder class that is built in to Laravel 5.1. It enables limited use of the whereHas method to query Eloquent polymorphic relationships.

  Sources   Download

LGPL3 LGPL-3.0-only

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent

30/01 2018

v2.0.2

2.0.2.0 https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Attempting to use whereHas queries with standard Eloquent polymorphic relationships will fail, due to Eloquent being unable to determine the correct model to retrieve. The 'Improved Polymorphic Eloquent Builder' is a class which extends the Eloquent Builder class that is built in to Laravel 5.1. It enables limited use of the whereHas method to query Eloquent polymorphic relationships.

  Sources   Download

LGPL-3.0-only

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent

14/07 2017

v2.0.1

2.0.1.0 https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Improved Polymorphic Eloquent Builder

  Sources   Download

LGPL3

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent

07/03 2017

v2.0.0

2.0.0.0 https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Improved Polymorphic Eloquent Builder

  Sources   Download

LGPL3

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent

17/02 2017

v1.0.1

1.0.1.0 https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Improved Polymorphic Eloquent Builder

  Sources   Download

LGPL3

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent

25/01 2017

v1.0

1.0.0.0 https://github.com/rapidwebltd/Improved-Polymorphic-Eloquent-Builder

Improved Polymorphic Eloquent Builder

  Sources   Download

LGPL3

The Requires

 

laravel eloquent polymorphic polymorphism laravel eloquent