Laravel Model无需主键即可保存数据

时间:2014-08-21 18:12:11

标签: php laravel laravel-4

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

3 个答案:

答案 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'

希望这有帮助