dendydandees
dendydandees

Reputation: 1

Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::associate()

I am trying to create a relationship in Laravel. I want to add data using one to one and one to many relationship and save the data to database. I'm stuck with this is error :

Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::associate()

StudentsController.php

public function store(Request $request)
    {
        $this->validate(
        $request,
        [
          'nama' => 'required',
          'nim' => 'required|size:10',
          'tanggal_lahir' => 'required',
          'jenis_kelamin' => 'required',
          'class_student_id' => 'required',
          'telephone' => 'nullable|numeric|digits_between:10,15|unique:telephones,telp_number'
        ],
        [
          'nama.required' => 'Form nama lengkap tidak boleh kosong',
          'nim.required' => 'Form nomor induk siswa tidak boleh kosong',
          'nim.size' => 'Form nomor induk siswa membutuhkan 10 karakter',
          'tanggal_lahir.required' => 'Form tanggal lahir tidak boleh kosong',
          'jenis_kelamin.required' => 'Form jenis kelamin tidak boleh kosong',
          'class_student_id.required' => 'Form kelas tidak boleh kosong'
        ],
      );

      $student = Student::create($request->all());

      $class_student = new ClassStudent;
      $class_student->student()->associate($student);
      $class_student->save();

      $telephone = new Telephone([
        'telp_number' => $request->input('telephone')
      ]);
      $student->telephone()->push($telephone);

      return redirect('students')->with('status', 'Data siswa berhasil ditambahkan');
    }

Student.php

class Student extends Model
{
    protected $fillable = [
      'nim',
      'nama',
      'tanggal_lahir',
      'jenis_kelamin',
      'class_student_id'
    ];

    public function telephone()
    {
      return $this->hasOne(Telephone::class);
    }

    public function classStudent()
    {
        // return $this->belongsTo(ClassStudent::class);
        return $this->belongsTo('App\ClassStudent', 'class_student_id');
    }
}

Telephone.php

class Telephone extends Model
{
  protected $fillable = ['id', 'telp_number'];

  public function student()
  {
      return $this->belongsTo(Student::class);
  }
}

ClassStudent.php

class ClassStudent extends Model
{
    protected $fillable = ['id', 'class_name'];

    public function student()
    {
        // return $this->hasMany(Student::class);
        return $this->hasMany('App\Student', 'id');
    }
}

What am I doing wrong?

Upvotes: 0

Views: 4439

Answers (1)

Shizzen83
Shizzen83

Reputation: 3529

First of all, you should rename your student relationship to students to reflect the fact it's a to-many relationship (reading student suggests it's a to-one)

associate is a method used by belongsTo relationships, not hasOneOrMany relationships. You must use save or create instead.

Full documentation here https://laravel.com/docs/7.x/eloquent-relationships#the-save-method

Upvotes: 3

Related Questions