我从来没有遇到任何与Laravel有任何问题,但我遇到了一些非常奇怪的事情。
我有一个one to one
关系将用户元数据存储在一个单独的表中。
我的Controller更新看起来像这样
$val = Validator::make(Input::all(), $rules);
if($val->passes())
{
$this->cur_user->username = Input::get('username');
$this->cur_user->metadata->first_name = Input::get('first_name');
$this->cur_user->metadata->last_name = Input::get('last_name');
$this->cur_user->metadata->gender = Input::get('gender');
$this->cur_user->metadata->location = Input::get('location');
$this->cur_user->email = Input::get('email');
$this->cur_user->metadata->dob = Input::get('dob');
$this->cur_user->metadata->about = Input::get('about');
if ($this->cur_user->save() && $this->cur_user->metadata->save())
{
$data = array('msg' => 'success');
}
关系
用户模型
class User extends Eloquent implements UserInterface, RemindableInterface {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
public function metadata()
{
return $this->hasOne('metadata');
}
}
元数据模型
class Metadata extends Eloquent {
public $timestamps = false;
protected $table = "users_metadata";
public function user()
{
return $this->belongsTo('user');
}
}
有什么奇怪的,如果我在验证中留下$ this->cur_user->metadata->gender = Input::get('gender');
和$this->cur_user->metadata->about = Input::get('about');
,我会收到以下错误
{"error":{"type":"Exception","message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: update `users_metadata` set `gender` = ?, `about` = ? where `id` is null) (Bindings: array (\n 0 => '1',\n 1 => 'testing one 2 3',\n))","file":"C:\\BitNami\\apache2\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php","line":555}}
如果我发表评论,一切都很好并且效果很好,检查了一切,我没有看到任何奇怪的事情。
可以请别人给我一个提示吗? (周围搜索找到了一些答案但不是我的问题)
答案 0 :(得分:2)
听起来你的user_metadata
表不包含users
表的外键,它要求能够连接用户和他/她的元数据。看起来该列也应该命名为id
。
如果您可以发布数据库结构,甚至更好:您的迁移文件,将会很有帮助。我可以冒险提出一个建议:
如果您的id
表格中有一个自动递增users
列,则您的user_metadata
迁移文件可能包含以下内容:
$table->integer('user_id')->unsigned();
$table->primary('user_id');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
也许您在设置中缺少某些部分?
换句话说,user_metadata.user_id
应为identifying foreign key,反映users.id
。当用户被删除时,他/她的元数据也应该被自动删除(除非您使用的是MyISAM,它不支持外键关系)。
有关Laravel / Eloquent外键的更多信息,请参阅手册:http://four.laravel.com/docs/schema#foreign-keys