首页 > 解决方案 > 雄辩的关系方法不存在

问题描述

我有两张桌子,“教师”和“教师证书”,它们保存教师证书。

我正在尝试通过像这里这样的雄辩关系来保存教师证书https://laravel.com/docs/5.7/eloquent-relationships#the-create-method

教师模型:

namespace App\Models\Teachers;

use App\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\SoftDeletes;

  class Teacher extends Model
  {
  public function Certificates()
     {
        return $this->hasMany(TeacherCertificates::class, 'teacher_id');
    }
  }
}

教师证书模型:

namespace App\Models\Teachers;

use App\User;
use Illuminate\Database\Eloquent\Model;

class TeacherCertificates extends Model
{
    protected $table='teacher_certificates';
    protected $fillable=['teacher_id','certificate'];
    protected $touches=[Teacher::class];
    public $timestamps=false;

}

和控制器:

namespace App\Http\Controllers\Dashboard;

use App\Http\Controllers\Controller;
use App\Models\Teachers\Experiences;
use App\Models\Teachers\Skills;
use App\Models\Teachers\Teacher;
use App\Models\Teachers\TeacherCertificates;
use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\TeacherCreateRequest;
use Illuminate\Support\Facades\DB;    

class TeacherController extends Controller
    {

        public function store(TeacherCreateRequest $request)
        {
            DB::transaction(function () use ($request) {
                $data = $request->all();
                $user = User::create($data);
                $data[ 'user_id']=$user->id;

                $teacher = Teacher::create($data);



                //certificates
                $certificates=array_map(
                    function ($certificate) use ($teacher) {
                        return ['teacher_id' => $teacher->id,
                            'certificate' => $certificate];
                    }, explode('\n', $request->certifications));


                $teacher->Certificates()->createMany($certificates);
            }
        }
    }

我收到此错误:

BadMethodCallException
Method Illuminate\Database\Query\Builder::App\Models\Teachers\Teacher does not exist.

标签: phplaraveleloquentlaravel-5.6

解决方案


问题在于$touches教师类的属性定义,它应该是你类中方法的名称。

欲了解更多信息,请阅读 Laravel 的文档


推荐阅读