Skip to content

tusimo/embed-relation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

id user_name book_ids data
1 tusimo 1,2,3 {"address":"NY","follower_ids":"1,3"}
2 john 2,4,7 {"address":"WD","follower_ids":"3"}
3 aly 5 {"address":"LA","follower_ids":"1,2"}

and book table like this,

id book
1 css
2 php
3 javascript
4 database
5 sql
6 python
7 html
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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages