Jerielle
Jerielle

Reputation: 7520

How to access other related model data in Laravel?

I am creating a user profile page and I want to retrieve the data from my User model and UserProfile model. But I have a problem in getting the result. Here's what I did:

User model

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'username',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    /*
    public function isAdmin() {
        return $this->admin;
    }
    */

    public function profile() {
        return $this->hasOne('App\UserProfile');
    }

}

UserProfile model

class UserProfile extends Model
{
    protected $table = 'user_profile';

    protected $fillable = [
        'phone',
        'address'
    ];

    public function user() {
        return $this->belongsTo('App\User');
    }
}

Then I access the relation in my ProfileController

  public function getProfile($username) {

        $user = User::with('user_profile')->where('username', $username)->get();

        dd($user);



    }

And I got this error:

Call to undefined relationship [user_profile] on model [App\User].

The user_profile is my table name

Upvotes: 1

Views: 100

Answers (1)

Alexey Mezenin
Alexey Mezenin

Reputation: 163898

Use proper relationship name:

$user = User::with('profile')->where('username', $username)->first();

Also, in this case you should use the first() method to get an user object.

Upvotes: 1

Related Questions