我有2个模特:个人资料和学生。该个人资料包含一个主键 id 。学生模型没有任何主键,但有一个外键 profile_id ,它链接到profile.id.我的学生控制器中有一个激活学生的功能,在调用时将状态从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');
}
答案 0 :(得分:27)
您可能需要考虑添加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');
}
}
答案 1 :(得分:0)
我遇到了同样的问题,无法为此表使用主键字段。
由于Eloquent无法更新这样的表,所以我解决了它,只是决定以另一种方式更新行:
NameOfMyTable::where('entity_type', 1)->update(['last_import' => Carbon::now()]);
答案 2 :(得分:-2)
如果有人有同样的问题。我使用了Nishchit Dhanani的答案(here)并且效果很好,这是:
将这一行写入你的模型中
public $ primaryKey =' _id&#39 ;;
其中_id是您的手动主键
对于我的情况。我有一个用户表,我的部分用户是学生。所以我学生表中的主键是" user_id"。
在我的学生模型中添加此行:public $ primaryKey =' user_id';
我在更新学生对象时能够使用save()方法。
在您的情况下,您只需添加您的学生模型
public $ primaryKey =' profile_id'
希望这有帮助