2014-11-08 3 views
1

Я создал (а) просто users таблицу с id, name и еще несколько полей в моем Laravel 4.2. В моем контроллере, я пытаюсь сохранить пользовательский ввод в качестве новой записи пользователя:Eloquent ORM создает плохой ответ

$user = new User(); 
$user->fill($input); 
$user->fullname = $input['firstname'] . ' ' . $input['lastname']; 
$user->save(); 

Система выдает ошибку MySQL, потому что ни один из строковых значений не указаны.

E.g.

INSERT INTO users (name, ...) VALUES (John, ...) 

Зачем это не приводить значение?

Спасибо.

EDIT:

Я все обязательные поля устанавливается в заполняемые в моей модели пользователя:

protected $fillable = array('firstname', 'lastname', 'fullname', 'email', 'username', 'birthday', 'gender', 'country', 'city', 'signature', 'confirmed', 'approved'); 

А вот полное сообщение об ошибке:

Осветите \ Database \ QueryException (HY000)

SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'US' for column 'country' at row 1 (SQL: insert into `users` (`firstname`, `lastname`, `email`, `username`, `birthday`, `gender`, `country`, `city`, `signature`, `fullname`, `updated_at`, `created_at`) values (John, Watson, [email protected], admin, 11/08/2014, male, US, New York, I am the main admin., John Watson, 2014-11-08 17:02:16, 2014-11-08 17:02:16)) 

EDIT AGAIN:

Цитата не проблема. Реальная ценность - проблема. Он ожидает целое число, и я предоставляю строку. Извините за ложную тревогу. Благодарю.

+2

Вы уверены, что это проблема? Опубликуйте сообщение об ошибке, которое вы получаете ... и убедитесь, что ваши столбцы настроены на 'fillable' на' user' model? – damiani

+0

Да, я уверен. Я добавил полное сообщение об ошибке в исходное сообщение. – akanevsky

+0

Ох. Теперь я вижу, что это не совсем ошибка, о которой я думал. Сожалею. Спасибо. – akanevsky

ответ

2

Вероятно, вы выяснили проблему (Комментарии говорят, что), что поле страны ожидает integer значения, но string дано вместо этого, но я собираюсь ответить на другие вещах, то есть вы вставляете fullname как:

$user->fullname = $input['firstname'] . ' ' . $input['lastname']; 

В этом случае вы можете избежать этого, но можете использовать, например, fullname; в вашей User модели просто объявить accessor method как это:

public function getFullNameAttribute() 
{ 
    return $this->firstname . ' ' . $this->lastname; 
} 

Таким образом, вы можете достичь того же самого, но не нужны использовать другое дополнительное поле в базе данных, и вы можете получить доступ к динамическому свойству, как это:

echo $SomeUserObject->full_name; 

Проверьте еще на странице Laravel.

+0

Это очень хороший совет.Это моя первая попытка в течение долгого времени работать с хорошо организованной объектно-ориентированной структурой, поэтому я полностью забыл, что я мог бы сделать аксессуар для конкатенаций, хотя это то, что я должен знать. Спасибо! – akanevsky

+0

Добро пожаловать :-) –

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