2014-10-05 3 views
0

Я пытаюсь реализовать отображение belongsTo в моем приложении Laravel 4. Но я не могу заставить его работать.Вставка данных при использовании BelongsTo mapping в Laravel 4

У меня есть таблицы БД с именем: вопросы:

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

В моем контроллере я использую следующие код для вставки данных формы.

$question = new Question(); 
$question->question_title = Input::get('question_title'); 
$question->question_details = Input::get('question_title'); 
$question->user(); 
$question->save(); 

ответ

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(); 
+0

Спасибо за ваш ответ. Когда я использую ваше первое решение, я получаю 'SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец« user_id »в« списке полей ». Спасибо –

+0

@black_belt Вы также должны изменить свое отношение. Я отредактировал свой ответ –

+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 автоматически ,

+0

Спасибо за ваш ответ. Когда я попробовал другое решение, я получил эту ошибку 'Call to undefined method Illuminate \ Database \ Query \ Builder :: save()', спасибо –

+0

Я отредактировал ответ, попробуйте сейчас. –

Смежные вопросы