我试图在laravel5.6中插入来自seeder的数据,但我遇到了一个json类型的字段问题。我希望这个字段('stops')是一个数组(例如10个不重复的整数)。
表seeder(routeTableSeeder.php)类似于:
<?php
use \Illuminate\Support\Facades\DB;
use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
use App\Models\Route;
class RoutesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//factory(Route::class, 20)->create();
$faker = Faker::create();
//$values= array();
/*for($i=0; $i < 10; $i++) {
$values []= $faker->unique()->randomDigit;
}
print_r(json_encode($values));*/
foreach (range(1, 20) as $index)
{
$values = array();
for($i=0; $i < 10; $i++) {
$values []= $faker->unique()->randomDigit;
}
//print_r($values);
DB::table('routes')->insert([
'user_id' => $faker->numberBetween($min = 1, $max = 20),
'name' => $faker->name,
'description' => $faker->name,
'route_photo' => $faker->image($dir = null, $width = 640, $height = 480, $category = null, $fullPath = true, $randomize = true, $word = null),
'stops'=> [
//$values,
json_encode($values)
//implode(", ", $values)
],
]);
}
}
}
我尝试了几种插入数据的方法。当我使用json\u encode($values)时,我有以下错误:
Array to string conversion
(SQL: insert into `routes` (`user_id`, `name`, `description`, `route_photo`, `stops`)
values (19, Isaac
Feil, Holly Nolan, /tmp/bc8a3cf5e015d3afa96317485499e0ca.jpg,
[8,6,0,7,3,1,5,2,4,9]))
例如,这种值[8,6,0,7,3,1,5,2,4,9]是我想存储在“stops”字段中的,但我不知道出了什么问题。。。。
拜托,你能帮我个忙吗?我绝望了。。。。
如果有帮助,我会发布模型:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Route extends Model
{
protected $fillable = [
'user_id',
'name',
'description',
'route_photo',
'stops'
];
protected $casts = [
'stops' => 'array'
];
}
以及迁移:
public function up()
{
Schema::create('routes', function (Blueprint $table) {
$table->increments('id');
//FK:users
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
//FK:users
$table->string('name');
$table->string('description')->nullable();
$table->string('route_photo');
$table->json('stops');
$table->timestamps();
});
}
谢谢!!
2条答案
按热度按时间wsxa1bj11#
json_encode($values)
返回一个字符串,可以将其用作stops
列。没有必要把[]
这样就创建了一个数组,不能将数组直接存储到列中。只需去掉括号:但是,将数组存储在数据库列中通常是个坏主意,它违反了规范化原则。您应该使用一个单独的表,每个值对应一行。
2lpgd9682#
不要投
stops
要排列,请先删除使用
json_encode
制作字符串