Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
813 views
in Technique[技术] by (71.8m points)

laravel - 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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

namespace App;

use IlluminateFoundationAuthUser;
use IlluminateSupportStr;

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...