Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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');
}
like image 932
jl. Avatar asked Aug 21 '14 18:08

jl.


2 Answers

You might want to consider adding an id field. It is pretty important to Laravel and packages (for aggregation, specifically)

but if you must...

Student Model: (camel case primaryKey property)

class Student extends Eloquent {

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


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

    public function profile() {
        return $this->belongsTo('Profile');
    }
}
like image 152
c-griffin Avatar answered Nov 20 '22 17:11

c-griffin


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()]);
like image 44
ivoroto Avatar answered Nov 20 '22 17:11

ivoroto