laravel как указать столбцы ввода

У меня есть форма в html, в которой есть ввод с именем restaurantName, но мой столбец в базе данных name. Я не могу использовать это в контроллере

Restaurant::create(Input::only('restaurantName'));

Поскольку столбца с restaurantName нет, поэтому мой вопрос: как сообщить laravel, что restaurantName сопоставляется с name?

огромное спасибо

Редактировать

HTML-форма имеет следующие поля:

restaurantName
website
username
password
mobileNumber
firstName
lastName

В базе данных есть две таблицы: Admin и Restaurant, у каждого ресторана есть один администратор, а администратор один для каждого ресторана, поэтому это отношение один к одному.

когда я отправляю форму, я делаю следующее:

$input = Input::all();
 $admin = Admin::create(Input::only('username', 'password', 'mobileNumber', 'firstName', 'lastName'));

                $data = ['name' , Input::get('restaurantName'), 'website' => Input::get('website')];
                $restaurant = new Restaurant($data);
                $admin->restaurant()->save($restaurant);

строка admin вставляется в базу данных, поэтому проблема начинается с кода строки $data.

исключение:

BadMethodCallException
Call to undefined method Illuminate\Database\Query\Builder::save()

person user2208349    schedule 18.06.2014    source источник


Ответы (1)


Во-первых, вы никогда не должны просто слепо передавать пользовательский ввод моделям, а во-вторых, эта конкретная проблема не имеет абсолютно никакого отношения к laravel.

Ваша проблема может быть решена с помощью базового PHP. Просто создайте свой собственный массив ввода.

$data = [
    'field'    => Input::get('field'),
    'name'     => Input::get('restaurantName')
];

Кажется, существует серьезное заблуждение, что Laravel — это отдельная независимая система, но это не так. Это буквально набор PHP-кода, он не делает ничего, что нельзя было бы сделать с помощью PHP, и не мешает вам делать то, что вы обычно делаете с PHP.

person ollieread    schedule 18.06.2014
comment
не могли бы вы объяснить свой код, пожалуйста? что мне делать с переменной $data? как я могу передать его функции ввода? что такое field вы сказали? - person user2208349; 18.06.2014
comment
Вы ничего не передаете Input. Input — это библиотека, которая просто облегчает поиск пользовательского ввода. Переменная $data будет передана функции создания, а поле будет просто случайным именем поля, чтобы показать вам, как оно будет работать. Я не хочу показаться грубым, но это все фундаментальный PHP, который, возможно, стоит изучить перед чем-то настолько сложным, как это. - person ollieread; 18.06.2014
comment
Я отредактирую вопрос, чтобы показать вам результат вашего кода: - person user2208349; 18.06.2014
comment
Я отредактировал вопрос, за исключением того, что получил, не могли бы вы проверить, пожалуйста? функция save не существует - person user2208349; 18.06.2014
comment
Во-первых, ваш массив $data неверен, он должен быть 'name' => Input.., а не 'name', Input... Я также буквально только что сказал: не передавайте массивы вслепую в create, вы должны сначала проверить. Ошибка, которую вы получаете, не имеет абсолютно никакого отношения к массиву, потому что вы пытаетесь сохранить отношение к тому, что кажется неотношением. - person ollieread; 18.06.2014
comment
Уважаемый, я знаю, что сначала мне нужно проверить, но я просто дам вам соответствующий код, иначе я бы дал вам весь код, я пытаюсь дать вам только соответствующий код, чтобы упростить его для вас. и у меня есть правильные отношения в моих моделях. это отношение один к одному. в таблице ресторана есть поле adminID, а в таблице admin нет поля resturantID. Должен ли я добавить это поле, пожалуйста? - person user2208349; 18.06.2014
comment
Не публикуйте новые вопросы, которые являются просто продолжением первого вопроса. Вы неправильно вставляете модель, ваши отношения настроены так, что это restaurant->admin()->save() - person ollieread; 18.06.2014
comment
когда я исправил, как вы сказали, restaurant()->admin()->save я получил исключение: Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, none given, called in C:\xampp2\htdocs\ParkingProject\app\controllers\RestaurantsController.php on line 44 and defined строка 44 - это restaurant->admin->save() - person user2208349; 18.06.2014
comment
Да, у вас отношения не в ту сторону, вы не можете вставить ресторан в качестве админа. Я не хочу показаться грубым, но ваша проблема в том, что вы не читали документы ни по laravel, ни по PHP, пожалуйста, сделайте это, это поможет, поверьте мне. - person ollieread; 18.06.2014
comment
Я пытаюсь это исправить, хотя я уже прочитал документацию по отношениям. - person user2208349; 18.06.2014
comment
теперь это работает, большое спасибо, но, пожалуйста, не используйте резких слов в следующий раз, потому что я уже прочитал документацию или отношения в laravel. - person user2208349; 18.06.2014