Laravel: Get current object inside model class

12,056

Solution 1

You're almost there, you just need to remove the static from your code. Static methods operate on a class, not an object; so $this does not exist in static methods

public function fullname() {
    return $this->first_name . ' ' . $this->last_name;
}

Solution 2

In your user model, your static function can look something like this

public static function fullname($username) {
    $user = self::where_username($username)->first();

    return $user->first_name.' '.$user->last_name;
}

You can then call this anywhere in your views/controllers etc with User::fullname($someonesUsername)

Share:
12,056
iamjonesy
Author by

iamjonesy

Lead dev at Appointedd. Based in Edinburgh, Scotland. A few of my sites: http://findr.fm http://defaqto.io http://masquerade.eu01.aws.af.cm

Updated on June 14, 2022

Comments

  • iamjonesy
    iamjonesy almost 2 years

    I'm wondering if it's possible to access the current object when accessing a method of that object. for example the method fullname() below is used to get the full name of the user.

    class User extends Eloquent 
    {
    
        public function itineraries() {
            return $this->has_many('Itinerary', 'user_id');
        }
    
        public function reviews() {
            return $this->has_many('Placereview', 'user_id');
        }
    
        public function count_guides($user_id){
            return Itinerary::where_user_id($user_id)->count();
        }
    
        public static function fullname() {
            return $this->first_name . ' ' . $this->last_name; // using $this as an example
        }
    }
    

    A user has a first_name field and a last_name field. Is there anyway I can do

    $user = User::where('username', '=', $username)->first();
    
    echo $user->fullname();
    

    Without having to pass in the user object?

  • Brett Santore
    Brett Santore about 6 years
    I like to use implode(' ', [$this->first_name, $this->last_name]); That way if either is ever blank there are no extra spaces
  • Istiaque Ahmed
    Istiaque Ahmed almost 6 years
    Neither first_name nor 'last_name' is a property of the class User. Still you can access them as they are database columns. 1) Unlike usual PHP classes, this is specific to Laravel, right ? 2) Where in Laravel doc is it said ?
  • moghwan
    moghwan over 3 years
    Found it: laravel.com/docs/5.5/eloquent-mutators , take a look at getFullNameAttribute() function. still supported in Laravel 8.