Модель 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');
}
Ответы
Ответ 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'
Надеюсь, что это поможет