'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 |
