2016-09-06 2 views
4

Laravel 5.3, PHP 5.6 Fresh laravel new Projekt, minimale Konfiguration.Laravel ORM Array zu String Konvertierung

Ich habe eine einfache Migration und ein Modell gemacht, und versuche, Daten in es über php artisan tinker zu säen.

Meine Migration sieht wie folgt aus:

<?php 

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreatesFooTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('foo', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('foo', 20); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::dropIfExists('foo'); 
    } 
} 

Wenn ich php artisan migrate die Datenbank laufen gerade fein auffüllt.

Das entsprechende Modell ist einfach:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Foo extends Model 
{ 
    protected $table = 'foo'; 

    protected $fillable = ['foo']; 

} 

Ich habe einen ModelFactory auch:

$factory->define(App\Foo::class, function (Faker\Generator $faker) { 

    return [ 
     'foo' => $faker->email, 
    ]; 
}); 

Tinker tut, was ich denke, es sollte tun, wenn ich make einen Flyer aus der Fabrik versuchen:

Aber wenn ich versuche, die Datenbank zu schlagen, schlägt Eloquent th e Abfragewerte in einer Zeichenfolge:

>>> $foo = factory('App\Foo')->create(); 
Illuminate\Database\QueryException with message 'SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'foo' at row 1 (SQL: insert into `foo` (`foo`, `updated_at`, `created_at`) values ([email protected], 2016-09-06 23:59:03, 2016-09-06 23:59:03))' 

Nichts dergleichen auf Google. Irgendwelche Ideen?

(Edited das gleiche Problem mit einem viel einfacheren Beispiel zeigen)

+1

Bist Du sicher nicht, es ist, weil Sie nicht Ihre ausfüllbare Felder auf dem Modell gesetzt haben? – pseudoanime

+0

@pseudoanime Nur die $ befüllbaren Felder hinzugefügt (oben bearbeitet). Gleiches Ergebnis. –

Antwort

1

es gelöst. Das Problem war die Fälscherbibliothek. Anscheinend, wenn Sie (string)$faker->whatever explizit umwandeln, behebt es das Problem.

7

Einige der faker-Methoden geben ihr Ergebnis standardmäßig als Array zurück. Zum Beispiel:

$faker->words(3) 

zurückkehren würde:

array('porro', 'sed', 'magni') 

das Ergebnis als String zurückzukehren Sie true als zweites Argument für einige Methoden, wie im vorherigen Beispiel mit der words Methode übergeben können:

$faker->words(3, true) 

kehrt:

"porro sed magni" 

Wie in der readme beschrieben:

words($nb = 3, $asText = false) // array('porro', 'sed', 'magni')