Laravel: Get current object inside model class
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)
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, 2022Comments
-
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 about 6 yearsI like to use
implode(' ', [$this->first_name, $this->last_name]);
That way if either is ever blank there are no extra spaces -
Istiaque Ahmed almost 6 yearsNeither
first_name
nor 'last_name' is a property of the classUser
. 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 over 3 yearsFound it: laravel.com/docs/5.5/eloquent-mutators , take a look at
getFullNameAttribute()
function. still supported in Laravel 8.