Метод красноречивых отношений не существует - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть две таблицы: «учителя» и «учителя_ сертификаты», в которых хранятся сертификаты учителей.

Я пытаюсь сохранить сертификаты учителей, используя красноречивые отношения, как здесь 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.

1 Ответ

0 голосов
/ 10 ноября 2018

Проблема заключается в определении свойства $touches класса Teacher, которое должно быть именем метода в вашем классе.

Для получения дополнительной информации читайте Документ Ларавела

...