42

GitHub - Ahnify/laravel-morphable: Easy querying on polymorphic relations.

 4 years ago
source link: https://github.com/Ahnify/laravel-morphable
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

Total Downloads Latest Stable Version License

Morphable

This package provides a trait that adds query scopes to an Eloquent model for easy querying on polymorphic relations.

Installation

You can install this package via composer using this command:

composer require "ahnify/laravel-morphable:^0.1"

The package doesn't need to be registered.

Usage

To query on polymorphic relation you must:

  1. add the trait Ahnify\Morphable\MorphableTrait to your model.

Example

use Ahnify\Morphable\MorphableTrait

class ExampleModel extends Eloquent
{

    use MorphableTrait;

    ...
}

that's it.

now you can query on your relation like this:

ExampleModel::whereMorphable('transactionable',BankTransaction::class,function($query){
    $query->where('amount','>', 30 );
})->get()

this is equivalent to this for non polymorphic relations:

ExampleModel::whereHas('bankTransaction',function($query){
    $query->where('amount','>', 30 );
})->get()

also, we can chain it too:

ExampleModel::query()
    ->whereMorphable('transactionable',BankTransaction::class,function($query){
        $query->where('amount','>', 30 );
    })
    ->orWhereMorphable('transactionable',OnlineTransaction::class,function($query){
            $query->where('created_date','>', '2019-01-01' );
    })
    ->get()

also, if some of your polymorphic related to our model have common attributes, then we can query on them and pass an array of morphed class type like this:

ExampleModel::whereMorphable('transactionable',[BankTransaction::class,OnlineTransaction::class],function($query){
    $query->where('amount','>', 30 );
})->get()
// get all rows that have bank or online transactions that has amount more than 30  

in this example the result includes all examples that has bank or online transaction with has amount more than 30

this works also with custom types too :

ExampleModel::whereMorphable('transactionable',['bankTransaction','onlineTransaction'],function($query){
    $query->where('amount','>', 30 );
})->get()

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK