Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I access attributes using camel case?

To be consistent over my coding style, I'd like to use camelCase to access attributes instead of snake_case. Is this possible in Laravel without modifying the core framework? If so, how?

Example:

// Database column: first_name  echo $user->first_name; // Default Laravel behavior echo $user->firstName; // Wanted behavior 
like image 439
Lazlo Avatar asked Aug 28 '14 23:08

Lazlo


1 Answers

Create your own BaseModel class and override the following methods. Make sure all your other models extend your BaseModel.

namespace App;  use Illuminate\Foundation\Auth\User; use Illuminate\Support\Str;  class BaseUser extends User {     public function getAttribute($key) {         if (array_key_exists($key, $this->relations)) {             return parent::getAttribute($key);         } else {             return parent::getAttribute(Str::snake($key));         }     }      public function setAttribute($key, $value) {         return parent::setAttribute(Str::snake($key), $value);     } } 

Then for usage:

// Database column: first_name  echo $user->first_name; // Still works echo $user->firstName; // Works too! 

This trick revolves around forcing the key to snake case by overriding the magic method used in Model.

like image 170
Lazlo Avatar answered Sep 20 '22 13:09

Lazlo