我正在尝试在Laravel 4应用程序中实现belongsTo
映射。但我似乎无法让它发挥作用。
我有一个名为“问题:
的数据库表question_id | question_title | question_details| ask_by_id | created_at| updated_at
此处ask_by_id
是users
表的外键
我面临的问题是当我将数据插入表格时,除了ask_by_id
列之外,所有列值都被正确插入。如果我使用belongTo
映射没有错,那么Laravel应该会自动在id
列中插入当前用户的ask_by_id
值。但它没有发生,请你告诉我我做错了什么?
以下是我的代码:
模型:问题
class Question extends Eloquent {
protected $table = "questions";
protected $primaryKey = 'question_id';
protected $fillable = array('question_title','question_details','ask_by_id');
public function user()
{
return $this->belongsTo('User', 'ask_by_id', 'id');
}
}
在用户模型中,我包含以下代码:
public function question()
{
return $this->hasMany('Question');
}
在我的Controller中,我使用以下代码插入表单数据。
$question = new Question();
$question->question_title = Input::get('question_title');
$question->question_details = Input::get('question_title');
$question->user();
$question->save();
答案 0 :(得分:0)
不,它不会自动插入你必须这样做明显有几种方法来做到这一点。
其中一个是像这样填写ask_by_id。
$question->ask_by_id = $userId;
$question->save();
另一个可以是
首先将您的问题方法更新为
public function question()
{
return $this->hasMany('Question','ask_by_id');
}
然后找到提出问题的用户
$user = User::find(1);
$question = new Question();
$question->question_title = Input::get('question_title');
$question->question_details = Input::get('question_title');
$user->question()->save($question);
这会自动更新ask_by_id。
答案 1 :(得分:0)
我认为你错了。在这种情况下,使用user()
意味着什么。您还应该更改User
的关系:
public function question()
{
return $this->hasMany('Question','ask_by_id', 'id');
}
使用时:
$question = new Question();
$question->question_title = Input::get('question_title');
$question->question_details = Input::get('question_title');
$question->user();
$question->save();
Laravel不知道要插入ask_by_id
的内容。
您可以使用以下代码:
$user = User::find($id); // or $user = Auth::user();
$question = new Question();
$question->question_title = Input::get('question_title');
$question->question_details = Input::get('question_title');
$user->question()->save($question);
或
$question = new Question();
$question->question_title = Input::get('question_title');
$question->question_details = Input::get('question_title');
$user = User::find($id); // or $user = Auth::user();
$question->ask_by_id = $user->id;
$question->save();