'Laravel Model saving data without primary key

I have 2 models: Profile and Student. The profile contains a primary key, id. Student model doesn't have any primary key, but one foreign key, profile_id, which links to profile.id. I have a function within my Student controller that activates the Student, setting the status from 0 to 1, when called. I am trying to use save() for the update of the value, but unable to do it, prompting me a message as such:

Column not found: 1054 Unknown column 'id' in 'where clause'

Can please advise? Thank you very much.

Student Model:

class Student extends Eloquent {

    protected $primary_key = null;
    public $incrementing = false;

    protected $fillable = array('username', 'password', 'status', 'profile_id');

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

Profile Model:

class Profile extends Eloquent {

    protected $fillable = array('firstname', 'lastname', 'email', 'phone');

    public function student()
    {
        return $this->hasOne('Student', 'profile_id', 'id');
    }
}

StudentController:

public function activate($id) {
        $student = Student::where('profile_id', '=', $id)->first();
        $student->status = 1;
        $student->save();
        return Redirect::to('students');
}


Solution 1:[1]

I had the same problem and couldn't use a primary key field for this table.

Since Eloquent cannot update tables like this, I solved it simply deciding updating the row in a different way:

NameOfMyTable::where('entity_type', 1)->update(['last_import' => Carbon::now()]);

Solution 2:[2]

If anyone has the same issue, I used Nishchit Dhanani answer and it worked pretty well:

Write this line into your Model:

public $primaryKey = '_id';

Where _id is your manual primary key.

For my case I had a user table and part of my users are students. So the primary key in my students table was "user_id" and I added this line in my Student model:

public $primaryKey = 'user_id';

I was able to use the save() method when updating my student object.

In your case you would just need to add this to your student model:

public $primaryKey = 'profile_id';

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ivoroto
Solution 2 Tony