jlopezcur/metable

Access model meta data as if it was a property on your model (Fork based on the work of https://github.com/Azirius/hasmeta) for Laravel 5

v0.1.4 2015-08-05 22:14 UTC

This package is not auto-updated.

Last update: 2024-04-27 16:26:02 UTC


README

A Laravel trait to access model meta data as if it was a property on your model (Fork based on the work of https://github.com/Azirius/hasmeta) for Laravel 5

Installation

Run composer require jlopezcur/metable 0.1.* or add "jlopezcur/metable": "0.1.*" to your composer.json file

In the Model that you want to utilise Metable add the following properties

	use Jlopezcur\Metable\MetableTrait;

	protected $meta_model       = 'ModelName'; // the name of your meta data model
	protected $meta_foreign_key = 'user_id'; // the foreign key of your main model
	protected $meta_primary_key = 'meta_id'; // the primary key of you meta data model
	protected $meta_key_name    = 'dataName'; // the column name that stores your meta data key name
	protected $meta_value_name  = 'dataValue'; // the column name that stores your meta data value

Real World Example

Nothing like a simple example to explain things

Setup

users table

id email password
1 john@somewhere.com ADpQeKh$2y$10$0dh/BerzTrEOBhu4SR3w05
2 sam@somewhere.com pQeKhrzTrEOBhu$2y$10$0dh/BeAD4SR3w05
3 neil@somewhere.com ADpQeKhrzTrEOBhu4SR3w05$2y$10$0dh/Be
4 ben@somewhere.com BeADpQeKhrzTrEO$2y$10$0dh/Bhu4SR3w05
5 mark@somewhere.com DpQeKhrzTrEOBhu4SR3w05$2y$10$0dh/BeA

users_meta table

id user_id meta_name meta_value
1 1 first_name John
2 1 surname Roberts
3 1 age 20
4 1 gender Male
5 2 first_name Steven
6 2 surname Watson
7 2 age 35
8 2 gender Male
9 3 first_name Sam
10 3 surname Faddy
11 3 age 30
12 3 gender Female
13 4 first_name Ben
14 4 surname Prokop
15 4 age 32
16 4 gender Male
17 5 first_name Jo
18 5 surname Blair
19 5 age 31
20 5 gender Female

User.php model

class User extends Eloquent {

	use Jlopezcur\Metable\MetableTrait;

	protected $meta_model       = 'UserMeta';
	protected $meta_foreign_key = 'user_id';
	protected $meta_primary_key = 'id';
	protected $meta_key_name    = 'meta_name';
	protected $meta_value_name  = 'meta_value';


	/**
	 * The database table used by the model.
	 *
	 * @var string
	 */
	protected $table = 'users';

	/**
	 * The primary key on the table
	 *
	 * @var string
	 */
	protected $primaryKey = 'id';

	// ...
}

UserMeta.php model

class UserMeta extends Eloquent {

	/**
	 * The database table used by the model.
	 *
	 * @var string
	 */
	protected $table = 'users_meta';

	/**
	 * The primary key on the table
	 *
	 * @var string
	 */
	protected $primaryKey = 'id';

	// ...
}

Usage

Now we can simply do this for getting meta data...

$user = User::find(1);
echo $user->gender; // Will output 'Male'

We can save meta data easily too...

$user = User::find(1);
$user->gender = 'Female';
$user->save();

Delete meta...

$user = User::find(1);
$user->gender = null;
$user->save();

New meta...

$user = User::find(1);
$user->anything_you_want = 'some lovely value';
$user->save();

Mass assignment...

$user = User::find(1);
$user->fill($request->input())->save();
$user->save();

For mass assignment Remember add in your model...

protected $guarded = array();