Может красноречиво игнорировать ненужные данные в Laravel 4

У меня есть форма, которая принимает данные, которые будут использоваться для создания двух новых записей таблицы базы данных. Форма принимает как данные пользователя, так и его адрес. Сведения о пользователе будут храниться с использованием метода User::create(Input::all()) в таблице пользователей, а сведения об адресах будут храниться с использованием метода Address::create(Input::all()) в таблице адресов базы данных.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что Eloquent жалуется на то, что улица, город, страна и т. д. не существуют в таблице пользователей. Это правда, что данные должны использоваться для адресной стороны вещей.

Есть ли способ заставить красноречиво игнорировать ненужные данные в массиве Input::all(), когда они передаются методам создания?

P.S. Я знаю, что массовое назначение - не очень хорошая идея, я использую его здесь только для упрощения своего вопроса.


person JasonMortonNZ    schedule 16.12.2013    source источник


Ответы (4)


Конечно, вы можете использовать массив $fillable в своей модели для объявления полей, разрешенных для массового назначения. Я считаю, что это наиболее подходящее решение в вашем случае.

class User extends Eloquent {

    protected $fillable = [
        'first_name',
        'last_name',
        'email'
    ];
}
person cheelahim    schedule 16.12.2013

Пробовали ли вы смотреть на Input::only('field1','field2',...); или даже на Input::except('field3')? Они должны быть в состоянии выполнить то, что вы ищете.

Источник: http://laravel.com/docs/requests

person HSkrasek    schedule 16.12.2013

Вам придется разблокировать эту модель, используя эти http://laravel.com/docs/eloquent#mass-assignment, а затем вручную отменить эти значения перед выполнением save(). Я настоятельно рекомендую использовать объект формы или что-то подобное для выполнения такого рода услуг за пределами вашей модели, поскольку это безопаснее и обычно понятнее предполагаемого поведения.

person machuga    schedule 16.12.2013

@cheelahim прав. При передаче массива в Model::create() все дополнительные значения, которых нет в Model::fillable, будут игнорироваться.

Однако я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ не передавать Input::all() в модель. Вы действительно должны проверять и проверять данные, прежде чем добавлять их в модель.

person ollieread    schedule 16.12.2013