2017-06-29 36 views
1

我对Laravel的播种有一个问题......所以我从我的种子中获得一个[ErrorException] Illegal offset type。我相信我的问题来自外键,从我使用的其他表Laravel播种问题

以下是我的模型,我的表和我的种子,我得到。

频道 - 型号

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

通道 - 表

<?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} 
+0

我注意到的第一件事是,在你的Seeder中,pluck()已经创建了一个集合数组。你应该删除 - > toArray()。虽然没有测试过。 –

+1

在一个集合上调用'pluck()'将返回一个数组,所以你不应该调用'toArray()',但不应该引发偏移异常。查看'storage/logs/laravel.log'获取有关异常的更多信息。 – Robert

+1

您正在使用哪种Laravel版本? – lesssugar

回答

4

此问题是因为您已将$primaryKey定义为数组。

更改它:

protected $primaryKey = ['channel_id']; 

要:

protected $primaryKey = 'channel_id'; 

希望这有助于!

+0

这工作....哇!谢谢你 –

+0

@GregSithole很高兴我能帮忙! :) –