Подтвердить что ты не робот

Модель Laravel сохраняет данные без первичного ключа

У меня есть 2 модели: Профиль и Студент. Профиль содержит первичный ключ, id. У студенческой модели нет первичного ключа, кроме одного внешнего ключа profile_id, который ссылается на profile.id. У меня есть функция внутри моего контроллера Student, которая активирует Student, устанавливая статус от 0 до 1 при вызове. Я пытаюсь использовать save() для обновления значения, но не могу сделать это, вызвав сообщение как таковое:

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

Можете ли вы посоветуете? Большое вам спасибо.

Студенческая модель:

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');
    }
}

Модель профиля:

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');
}
4b9b3361

Ответ 1

Возможно, вы захотите добавить поле id. Это очень важно для Laravel и пакетов (для агрегирования, в частности)

но если вы должны...

Студенческая модель: (свойство верблюда primaryKey)

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');
    }
}

Ответ 2

Если у кого-то такая же проблема. Я использовал Nishchit Dhanani ответ (здесь), и он работал очень хорошо, что было:
Напиши эту строку в свою модель
public $primaryKey = '_id';
Где _id - ваш ручной первичный ключ

В моем случае. У меня была пользовательская таблица, и часть моих пользователей - это студенты. Таким образом, основным ключом в таблице моих учеников был "user_id".
Добавление этой строки в мою модель для учащихся: public $primaryKey = 'user_id';

Я смог использовать метод save() при обновлении объекта студента.

В вашем случае вам просто нужно добавить свою модель для студентов
public $primaryKey = 'profile_id'

Надеюсь, что это поможет