2016-11-08 5 views
0

Проект находится на Laravel 5.3, я собираю данные в сеансе для нескольких страниц, и я хочу добавить его в MySQL. Проблема в том, что данные не вставляются в MySQl только created_at. Данные находятся в переменной, но не сохраняются в MySQL.Laravel добавить данные в MySQL

Модель:

class Post extends Model 
{ 
    public $vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4; 

    protected $fillable = ['vardas', 'pavarde', 'miestas', 'amzius', 'telefonas', 'pastas', 'q1', 'q2', 'q3', 'q4']; 

    public function addToDb($vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4) 
    { 
     $answer = new Post; 

     $answer->vardas = $vardas; 
     $answer->pavarde = $pavarde; 
     $answer->miestas = $miestas; 
     $answer->amzius = $amzius; 
     $answer->telefonas = $telefonas; 
     $answer->pastas = $pastas; 
     $answer->q1 = $q1; 
     $answer->q2 = $q2; 
     $answer->q3 = $q3; 
     $answer->q4 = $q4; 
     $answer->save(); 
    } 

} 

База данных:

Schema::create('answers', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('vardas'); 
     $table->string('pavarde')->nullable(); 
     $table->string('miestas')->nullable(); 
     $table->string('amzius')->nullable(); 
     $table->string('telefonas')->nullable(); 
     $table->string('pastas')->nullable(); 
     $table->string('q1')->nullable(); 
     $table->string('q2')->nullable(); 
     $table->string('q3')->nullable(); 
     $table->string('q4')->nullable(); 
     $table->timestamps(); 
    }); 

и контроллер:

public function getAciu() { 
    $vardas = Input::get('vardas'); 
    $pavarde = Input::get('pavarde'); 
    $miestas = Input::get('miestas'); 
    $amzius = Input::get('amzius'); 
    $telefonas = Input::get('telefonas'); 
    $pastas = Input::get('pastas'); 
    $q1 = Session::get('q1'); 
    $q2 = Session::get('q2'); 
    $q3 = Session::get('q3'); 
    $q4 = Session::get('q4'); 
    $answer = new Post; 
    $answer->addToDb($vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4); 

    return view('aciu'); 
} 
+0

У вас есть 'использование Illuminate \ Database \ Eloquent \ Model;' в верхней части вашей модели? – cssBlaster21895

ответ

0

Попробуйте это первый

try{ 
    $answer->save(); 
} 
catch(\Exception $e){ 
    var_dump($e->getMessage()); 
} 
0

Если это post/put метод и так как вы используете $fillable, вы можете сделать это:

public function getAciu (Request $request) { 
    $request->q1 = Session::get('q1'); 
    $request->q2 = Session::get('q2'); 
    $request->q3 = Session::get('q3'); 
    $request->q4 = Session::get('q4'); 
    Post::create($request()->all()); 

    return view('aciu'); 
} 
2

Я хотел бы, чтобы рекомендовать использовать только Laravel 5.3 официальный синтаксис.

Как вы упомянули, вы используете Laravel 5.3.

Пожалуйста, попробуйте ввести следующий код.

Для отладки значения переменных используется «dd ($ variable_name)»;

Примечание: Убедитесь, что вы изменили модификатор доступа к «addToDb» для защиты, чтобы получить доступ к нему на контроллере без int. объект класса, например: $ result = Post :: addToDb ($ vardas, $ pavarde, $ miestas, $ amzius, $ telefonas, $ pastas, $ q1, $ q2, $ q3, $ q4) ;.

Модель: "Используйте Осветите \ Database \ красноречивый \ Model;" прежде чем объявить вашу модель класса

например:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

    class Post extends Model 
    { 

     protected $fillable = ['vardas', 'pavarde', 'miestas', 'amzius', 'telefonas', 'pastas', 'q1', 'q2', 'q3', 'q4']; 

     protected function addToDb($vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4) 
     { 
      //dd($vardas); uncomment to debug the value of $vardas 

      $answer = new Post(); 

      $answer->vardas = $vardas; 
      $answer->pavarde = $pavarde; 
      $answer->miestas = $miestas; 
      $answer->amzius = $amzius; 
      $answer->telefonas = $telefonas; 
      $answer->pastas = $pastas; 
      $answer->q1 = $q1; 
      $answer->q2 = $q2; 
      $answer->q3 = $q3; 
      $answer->q4 = $q4; 
      return $answer->save(); 
     } 

    } 

Контроллер:

Пожалуйста, используйте следующую строку перед declartions класса контроллера и изменить «использовать App \ Post,» с вами сообщение модель пространства имен ,

например:

метод
namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Post; // Please specify namespace of your model here 

Изменить контроллер:

public function getAciu (Request $request) { 
     //dd($request->all()); //uncomment to debug complete request body 
     $vardas = $request -> input('vardas'); 
       $pavarde = $request -> input('pavarde'); 
       $miestas = $request -> input('miestas'); 
       $amzius = $request -> input('amzius'); 
       $telefonas = $request -> input('telefonas'); 
       $pastas = $request -> input('pastas'); 
       $q1 = $request -> session() - > get('q1'); 
       $q2 = $request -> session() - > get('q2'); 
       $q3 = $request -> session() - > ('q3'); 
       $q4 = $request -> session() - > ('q4'); 
       $result = Post::addToDb($vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4); 
       return view('aciu'); 
     } 
  • Как вы используете Laravel 5.3.

  • В laravel 5.3 $ request-> input ('field_name') вместо Вход :: get ('field_name');

  • А также сеанс можно использовать с помощью $ request-> session() -> get ('key_name');

Пожалуйста, проверьте исх: https://laravel.com/docs/5.3/requests

Надежда выше код будет работать.

+0

В вашей модели нет необходимости определять метод 'addToDb' для сохранения данных в базе данных, так как вы можете использовать встроенный статический метод' create' для создания и сохранения данных. В вашем случае: 'Post :: create ($ data);' –

+0

Да, вы правы @B_CooperA. Но если вы хотите создать объект модели. после сохранения вы можете использовать $ answer-> save(); в противном случае вы можете использовать Post :: create ($ data) ;. Но вам нужно создать массив для создания meathod, например, $ data должен быть массивом. – Nikhil

+0

Да, полностью. Хорошо, что вы указываете, что переменная $ data действительно должна быть массивом, если использовать метод 'create'. Я думаю, что это должен быть правильный ответ. –

0

Вы должны удалить строку:

public $vardas, $pavarde, $miestas, $amzius, $telefonas, $pastas, $q1, $q2, $q3, $q4; 

И пытаются использовать что-то другое, например, добавить синтаксис PHPDoc вместо:

/** 
* Class Post 
* @package App 
* @property int $id 
* @property string $vardas 
* //... 
*/ 
Class Post extends Model { //... 

Почему? Поскольку вы объявляете свойство для класса, когда вы пытаетесь установить его в свою модель, оно сохранит это значение в этом свойстве (переменная экземпляра), а не вызывает __set() (какой класс класса использует его для сохранения ваших данных в attributes, который будет использоваться, когда вы пытаетесь сохранить его в БД.)

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