2016-11-08 77 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陣列,這是怎麼回事,當你試圖將它保存到數據庫中使用)