Laravel 播种问题

Laravel Seeding Issue

我遇到了关于 Laravel 的播种问题...所以我从我的一个种子那里得到了 [ErrorException] Illegal offset type。我相信我的问题来自外键,来自我正在使用的另一个 table

下面是我的模型、我的 Table 和我得到的种子。

渠道 - 型号

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Tenant;
use App\InactiveLead;
use App\Lead;


class Channel extends Model
{
    //
    protected $primaryKey = ['channel_id'];

    protected $fillable = ['name', 'tenant_name'];

    public function tenant()
    {
        return $this->belongsTo(Tenant::class, 'name', 'tenant_name');
    }

    public function inactivelead()
    {
        return $this->hasMany(InactiveLead::class, 'inactive_lead_id', 'inactive_lead_id');
    }

    public function lead()
    {
        return $this->hasMany(Lead::class, 'lead_id', 'lead_id');
    }
}

频道 - Table

<?php

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

class CreateChannelsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('channels', function (Blueprint $table) {
            $table->increments('channel_id');

            $table->string('name');

            $table->string('tenant_name');
            $table->foreign('tenant_name')->references('name')->on('tenants');

            $table->unique(['tenant_name', 'name']);

            $table->timestamps();
        });
    }

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

频道 - 播种机

<?php

use Illuminate\Database\Seeder;
use App\Tenant;
use App\Channel;
use Faker\Factory as Faker;

class ChannelsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    $faker = Faker::create();

    $Tenants = Tenant::all()->pluck('name')->toArray();

    $Channels = array('SMS', 'Email', 'MMS', 'Call');

    $limit = 100;

    for($i = 0; $i < $limit; $i++) {
        $channel = new Channel([
            'tenant_name' => $faker->unique()->randomElement($Tenants),
            'name' => $faker->unique()->randomElement($Channels)
        ]);

        $channel->save();
    }
}
}

以下是我的日志:

[2017-06-29 08:49:11] local.ERROR: ErrorException: Illegal offset type in C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:818
Stack trace:
#0 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(818): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Illegal offset ...', 'C:\Users\Myster...', 818, Array)
#1 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(803): Illuminate\Database\Eloquent\Model->getCasts()
#2 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(832): Illuminate\Database\Eloquent\Model->hasCast('tenant_name', Array)
#3 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(565): Illuminate\Database\Eloquent\Model->isDateCastable('tenant_name')
#4 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(525): Illuminate\Database\Eloquent\Model->isDateAttribute('tenant_name')
#5 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(230): Illuminate\Database\Eloquent\Model->setAttribute('tenant_name', 'sunt')
#6 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(152): Illuminate\Database\Eloquent\Model->fill(Array)
#7 C:\Users\Mystere\seoforge_v5\database\seeds\ChannelsTableSeeder.php(29): Illuminate\Database\Eloquent\Model->__construct(Array)
#8 [internal function]: ChannelsTableSeeder->run()
#9 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array)
#10 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#11 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#12 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#13 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Seeder.php(114): Illuminate\Container\Container->call(Array)
#14 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Seeder.php(37): Illuminate\Database\Seeder->__invoke()
#15 C:\Users\Mystere\seoforge_v5\database\seeds\DatabaseSeeder.php(22): Illuminate\Database\Seeder->call('ChannelsTableSe...')
#16 [internal function]: DatabaseSeeder->run()
#17 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array)
#18 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#19 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#20 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#21 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Seeder.php(114): Illuminate\Container\Container->call(Array)
#22 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php(63): Illuminate\Database\Seeder->__invoke()
#23 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\GuardsAttributes.php(122): Illuminate\Database\Console\Seeds\SeedCommand->Illuminate\Database\Console\Seeds\{closure}()
#24 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php(64): Illuminate\Database\Eloquent\Model::unguarded(Object(Closure))
#25 [internal function]: Illuminate\Database\Console\Seeds\SeedCommand->fire()
#26 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array)
#27 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#28 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#29 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Container\Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#30 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Console\Command.php(182): Illuminate\Container\Container->call(Array)
#31 C:\Users\Mystere\seoforge_v5\vendor\symfony\console\Command\Command.php(264): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#32 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Console\Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#33 C:\Users\Mystere\seoforge_v5\vendor\symfony\console\Application.php(869): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 C:\Users\Mystere\seoforge_v5\vendor\symfony\console\Application.php(223): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Database\Console\Seeds\SeedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#35 C:\Users\Mystere\seoforge_v5\vendor\symfony\console\Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#36 C:\Users\Mystere\seoforge_v5\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#37 C:\Users\Mystere\seoforge_v5\artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#38 {main}  

这个问题是因为您将 $primaryKey 定义为数组。

更改自:

protected $primaryKey = ['channel_id'];

收件人:

protected $primaryKey = 'channel_id';

希望对您有所帮助!