#mysql #angularjs #laravel
#mysql #angularjs #laravel
Вопрос:
Я новичок в laravel и сталкиваюсь со следующей проблемой
Моя проблема
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я отправляю форму после заполнения firstname lastname и phone, тогда все идет хорошо, за исключением одного, что в моей базе данных MYSQL данные сохраняются как firstname: NULL lastname: NULL и phone: NULL вместо сохранения данных, которые я ввел.
У меня есть форма angularjs, в которой есть такие поля, как firstname lastname и phone. при отправке он переходит в submitContact() в контроллере:
submit.js:
var addnew = angular.module('addnew',[]);
// create angular controller
addnew.controller('addContactController',
function($scope,$location,$window,$http) {
// function to submit the form after all validation has occurred
$scope.submitContact = function() {
$scope.addnew = {firstname:'', lastname:'',phone:''};
$scope.addnew.firstname=$scope.firstname;
$scope.addnew.lastname=$scope.lastname;
$scope.addnew.phone=$scope.phone;
$http.get("http://localhost:8000/index.php/user/addnew",{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname})
.then(function mysuccess(response) {
$scope.mycard = response.data;
$scope.statuscode = response.status;
$scope.statustext = response.statustext;
$window.alert(JSON.stringify(response));
console.log(response.data);
});
};
});
http://localhost:8000/index.php/user/addnew это связано с моим laravel через маршруты.
мой route.php:
Route::get('/user/addnew', 'usercontroller@store');
мой usercontroller.php
public function store(Request $request)
{
//contacts::create(Request::all());
$user = new contacts;// contacts is my table name and my database is defined in .env file
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->phone = Input::get('phone');
$user->save();
//I Used print_r to see that weather my submitted data is coming in $user or not:
print_r($user);
echo "saved";
}
мой contact.php:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class contacts extends Model
{
protected $fillable =['firstname','lastname','phone'];
}
?>
Теперь моя проблема
когда я печатаю $ user, я получаю сообщение об ошибке, так как мой массив НЕ улавливает вывод моих отправленных данных print_r ($user) в окне консоли:
[fillable:protected] => Array
(
[0] => firstname
[1] => lastname
[2] => phone
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[keyType:protected] => int
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[firstname] =>
[lastname] =>
[phone] =>
[updated_at] => 2016-10-07 03:46:34
[created_at] => 2016-10-07 03:46:34
[id] => 38
)
[original:protected] => Array
(
[firstname] =>
[lastname] =>
[phone] =>
[updated_at] => 2016-10-07 03:46:34
[created_at] => 2016-10-07 03:46:34
[id] => 38
)
Я хочу знать, где я допускаю ошибку и как я могу исправить эту ошибку.
Благодарю вас в ожидании.
Комментарии:
1. Не могли бы вы сказать мне, каков результат dd($request-> all());
2. Я тоже пробовал это, но дело в том, что он сохраняет только Null как значение всего поля в таблице контактов моей базы данных.
3. Вы получаете ответ на запрос?, Когда вы выполняете dd($request-> all()), вы можете увидеть запрос в консоли вашего браузера.
4. Пожалуйста, сообщите нам, каков ответ на dd($request-> all());
5. Я получаю пустой массив, когда возвращаю запрос $, и в окне журнала консоли он показывает весь внутренний скрипт
Ответ №1:
Попробуйте это:
$user = new Contact();
Вместо этого:
$user = new contacts;
Кроме того, измените имя класса на class Contact extends Model
, а имя файла на Contact.php
.
В качестве альтернативы, поскольку вы используете $fillable
, вы можете создать новую строку:
Contact::create($request->all());
Комментарии:
1. Спасибо за ваш ответ, но он не работает.. Я также попробовал Contact::create($request-> all()); но его сохранение только NULL в качестве значения в базе данных
2. Измените имя класса и имя файла. Вы получаете какие-либо ошибки?
Ответ №2:
Я думаю, вам следует использовать POST вместо GET.
$http.post("http://localhost:8000/index.php/user/addnew",{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname})
.then(function mysuccess(response) {
$scope.mycard = response.data;
$scope.statuscode = response.status;
$scope.statustext = response.statustext;
$window.alert(JSON.stringify(response));
console.log(response.data);
});
И
Route::post('/user/addnew', 'usercontroller@store');
И я заметил, что вы отправляете в /index.php/user/addnew
И ваш маршрут отличается '/user/addnew'
'/index.php/user/addnew'
и '/user/addnew'
отличается.
попробуйте опубликовать localhost:8000/user/addnew
вместо
Чтобы объяснить:
/user/addnew
всегда обращайтесь к host:port/user/addnew
While user/addnew
просто объединит его с вашим текущим URL
например, если вы в настоящее время: localhost:8000/users/1
Нажатие на ссылку user/addnew
приведет вас к localhost:8000/users/1/user/addnew
, а ссылка на /user/addnew
приведет вас к localhost:8000/user/addnew
Редактировать:
Это избыточно?
$scope.addnew.firstname=$scope.firstname;
$scope.addnew.lastname=$scope.lastname;
$scope.addnew.phone=$scope.phone;
То, что вы отправляли, это:
{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname}
Я думаю, вы можете отправить это вместо:
$scope.addnew
и опять же, вы должны использовать POST, а не GET .
вы уже обновили свой http-запрос на post? вы обновили URL-адрес?
Комментарии:
1. На случай, если вы не поняли мое объяснение xD: webmasters.stackexchange.com/questions/56840 /…
2. Было бы здорово, если бы вы могли объяснить мне, как отправлять данные JSON со стороны angularjs и как получить те же данные на стороне laravel, чтобы их можно было сохранить в таблице mysql. Благодарю вас в ожидании
3. Я обновил свой ответ, возможно, ваш запрос работает, но я думаю, что ваш $request равен NULL, потому что это запрос GET. Запросы GET предназначены для извлечения данных, а не для ввода данных. хотя, мое второе предположение заключается в том, что ваши $scope.firstname, $scope.phone и $scope.lastname пусты. попробуйте console.log($scope.addnew) после установки его атрибутов. Таким образом, мы можем увидеть, действительно ли в нем есть данные.
4. Спасибо за ваш ответ и указание на мою ошибку.. Я видел еще одну вещь, которую я отправляю в json-данные в Laravel.. laravel не может получить этот json, и именно поэтому он выдает null в качестве значения в таблице.. Как я могу получить данные json в контроллере laravel ..??
5. если вы dd($request-> all()); и он возвращает НУЛЕВОЙ или нулевой массив. Тогда проблема связана с интерфейсом. попробуйте войти в систему как на стороне laravel, так и на стороне angular, чтобы увидеть, где происходит ошибка.
Ответ №3:
На самом деле, я достиг этого, используя $request->input('firstname');
$request->input('firstname');
$request->input('firstname');
, поскольку, это был JSON вот почему. Иначе, если бы я использовал блейд-файл Laravel, я мог бы сделать это с помощью вышеуказанных решений.