2016-09-06 103 views
4

Laravel 5.3,PHP 5.6 新鮮laravel new項目,最小配置。Laravel ORM數組到字符串轉換

我做了一個簡單的遷移和模型,並試圖通過php artisan tinker將數據種入數據。

我的遷移是這樣的:

<?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'); 
    } 
} 

當我運行php artisan migrate數據庫填充就好了。

相應的模式很簡單:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

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

    protected $fillable = ['foo']; 

} 

我有一個ModelFactory還有:

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

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

廷克做什麼,我想,當我嘗試make從工廠傳單它應該做的:

>>> factory('App\Foo')->make(); 
=> App\Foo {#696 
    foo: "[email protected]", 

但是,當我嘗試擊中數據庫時,Eloquent無法將第e查詢值中的一個字符串:

>>> $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))' 

在Google上沒有這樣的內容。有任何想法嗎?

(編輯顯示相同的問題,一個更簡單的例子)

+1

你確定這不是因爲你沒有設置對模型的可填寫字段? – pseudoanime

+0

@pseudoanime剛剛添加了$ fillable字段(上面已編輯)。同樣的結果。 –

回答

1

解決了它。問題是faker庫。顯然,當您明確投出(string)$faker->whatever它可以解決問題。

7

某些faker方法將其結果作爲數組返回,作爲默認值。例如:

$faker->words(3) 

將返回:

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

要返回的結果爲一個字符串你可以通過true作爲一些方法的第二個參數,作爲使用words方法在前面的例子:

$faker->words(3, true) 

回報:

"porro sed magni" 

正如readme描述:

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