Laravel 模型在没有主键的情况下保存数据

2022-08-30 15:35:12

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

学生主讲员:

public function activate($id) {
        $student = Student::where('profile_id', '=', $id)->first();
        $student->status = 1;
        $student->save();
        return Redirect::to('students');
}

答案 1

您可能需要考虑添加字段。这对Laravel和软件包非常重要(特别是对于聚合)id

但如果你必须...

学生模型:(骆驼案例属性)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

我遇到了同样的问题,无法对此表使用主键字段。

由于 Eloquent 无法像这样更新表,因此我只需以不同的方式决定更新行即可解决它:

NameOfMyTable::where('entity_type', 1)->update(['last_import' => Carbon::now()]);

推荐