Laravel 4 - 未找到模型方法

时间:2014-06-12 17:14:10

标签: methods laravel model

我已将profiles方法添加到User模型中,如下所示:

<?php

class User extends Eloquent {

    protected $table = 'users';

    protected $hidden = array('password', 'remember_token');

    public function profiles()
        {
            return $this->hasMany('Profile');
        }

}

但是,当我尝试使用这种关系时:

$profile = $user->profiles()->save($profile);

我收到以下错误:

Call to undefined method Illuminate\Database\Query\Builder::profiles()

为什么?

2 个答案:

答案 0 :(得分:2)

它应该是这样的:

$profile = $user->profiles->first()->save($profile);

这是因为,$user->profiles()会返回Profile模型的集合,因为关系是hasMany,而且在集合中(没有选择任何profile模型)您无法调用save()方法。

但错误并非如此,而是由于您使用了profiles()而导致错误,它应该是profiles

顺便说一下,我认为您应该使用User声明ProfilehasOne模型之间的关系,因为一个User只能有一个Profile所以它可以在User模型中声明为这样:

public function profile()
{
    return $this->hasOne('Profile');
}

因此,您可以像这样调用save()方法:

$profile = $user->profile->save($profile);

在创建User模型时,您应该实现两个接口,如下所示:

class User extends Eloquent implements UserInterface, RemindableInterface {

    // Code ...
}

答案 1 :(得分:0)

在模型类中尝试此操作

使用Illuminate \ Auth \ UserInterface;    使用Illuminate \ Auth \ Reminders \ RemindableInterface;

class User extends Eloquent实现UserInterface,RemindableInterface {      protected $ table =&#39; users&#39;;

     protected $hidden = array('password', 'remember_token');

     public function profiles()
          {
        return $this->hasMany('Profile');
         }

}