tusimo/embed-relation

a relation for laravel

v0.3 2018-11-30 02:13 UTC

This package is not auto-updated.

Last update: 2024-11-10 06:12:23 UTC


README

embed-relation Latest Stable Version Total Downloads

add a new relation is missing from Laravel's ORM. embedsMany extends Eloquent ORM .

Installation

Either PHP 5.6+ is required.

To get the latest version of embedsMany, simply require the project using Composer:

$ composer require tusimo/embed-relation

Instead, you may of course manually update your require block and run composer update if you so choose:

{
    "require": {
        "tusimo/embed-relation": "^0.1"
    }
}

Usage

Within your eloquent model class add following line And when we have a json string column as data. We support virtual column and can use cast. And support some new cast, 'integer_array', 'string_array', 'float_array', 'bool_array'

class User extends Model {
    use \Tusimo\Eloquent\Traits\EmbedsRelation;
    use \Tusimo\Eloquent\Traits\CastAttributes;
    
    protected $virtualColumnMaps = [
        'data' => [
            'address' => 'home_address',//you can rename the column
            'follower_ids'
        ],
        //'more_json_data' => [],
    ];
    
    protected $casts = [
        'book_ids' => 'integer_array',
        'home_address' => 'string',
        'follower_ids' => 'integer_array',
    ];
    ...
}

Example:

Consider User has several favorite books and the book_ids just store in the user table as book_ids column. We want this column can to load use relations. So we can do it like this. We have user table just like this.

and book table like this,

class User extends Model {
    use \Tusimo\Eloquent\Traits\EmbedsRelation;

    public function books () {
        return $this->embedsMany(Book::class);
    }
}

If we want to get the books so we can use$user->books. For now I just finished get relation data. Next I will do the save thing And the reverse relation.

Now we can access data like this .

    $user->home_address = 'HA';
    $user->follower_ids = [1,2,3,4];
    $user->save();
    foreach($user->follower_ids as $followerId) {//which now is array type
        echo $followerId;
    }
    if($user->isVirtualDirty('home_address')) {
        //detect virtual column is dirty or not 
        dd($user->getVirtualDirty());
    }

License

The MIT License (MIT). Please see License File for more information.