2016-11-08 45 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

你有'使用照亮\数据库\雄辩\型号;'在模型的顶部? – 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);

型号: 使用 “使用照亮\数据库\雄辩\型号;”声明模型类前

如:

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 \帖子,”跟你邮模型命名空间。

e.g:

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 $请求 - >输入用来代替 输入( 'FIELD_NAME')::得到( 'FIELD_NAME');

  • 而且还会话可以使用 $请求 - >会话()获取 - >获取( '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

是的,完全。不错,您指出如果使用'create'方法,$ data变量确实应该是一个数组。我认为这应该是正确的答案。 –

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()(其中Model类用它来保存你的数据为attributes阵列,这是怎么回事,当你试图将它保存到数据库中使用)