Laravel Seeder,调用未定义的方法:: create

mas*_*ast 3 php model laravel

我有一个针对不同型号的播种机,其中一个在我尝试时给我以下错误 artisan db:seed

PHP Fatal error:  Call to undefined method Illuminate\Events\Dispatcher::create() in C:\www\site\bootstrap\compiled.php on line 3155
Run Code Online (Sandbox Code Playgroud)

这是Event.php,似乎导致问题的模型:

<?php

class Event extends Eloquent {

    protected $fillable = array('name', 'played_on');
    protected $table = 'events';

    // RELATIONSHIPS ----------------------------
    // Event has many Decks
    public function decks() {
        return $this->belongsToMany('Deck', 'decks_events', 'event_id', 'deck_id');
    }

}
Run Code Online (Sandbox Code Playgroud)

注意:我添加了protected $table = 'events'试图看看是否导致问题,我不认为这是必需的.这是播种机的一部分.该Deck部分工作正常(事实上,我确实看到'添加一些卡片到一些套牌'消息,因为它崩溃)

    // Decks
    $deck_1 = Deck::create(array(
        'meta' => 'U/W Control',
        'player' => 'Cookie Monster'
    ));

    $deck_2 = Deck::create(array(
        'meta' => 'RDW',
        'player' => 'Suzy Waterbottle'
    ));

    // All 3 cards in Deck 1
    $card_1->decks()->attach($deck_1->id);
    $card_2->decks()->attach($deck_1->id);
    $card_3->decks()->attach($deck_1->id);
    // 2 cards in Deck 2
    $card_1->decks()->attach($deck_2->id);
    $card_2->decks()->attach($deck_2->id);

    $this->command->info('Added some cards to some decks');

    // Events
    $event_1 = Event::create(array(
        'name' => 'Super Duper Tourney',
        'played_on' => '07/05/2014'
    ));

    $deck_1->events()->attach($event_1->id);
    $deck_2->events()->attach($event_1->id);

    $this->command->info('Added decks to the event');
Run Code Online (Sandbox Code Playgroud)

这让我相信$event_1 = Event::create在线上发生了一些错误,但我无法弄清楚它看起来与用于$deck_1... 的代码完全相同$deck_2......

Ant*_*iro 6

Event是Laravel中的"保留"字样.您可能必须更改它或命名您的类.

因此,它使用的是Laravel Event,而不是您的Event模型类Illuminate\Events\Dispatcher.

它实际上是app/config/app.php上的Alias.

命名它:

<?php namespace App;

use Eloquent;

class Event extends Eloquent {

   ...

}
Run Code Online (Sandbox Code Playgroud)

使用命名空间:

<?php

use App\Event;

class Whatever {

    $event_1 = Event::create(array(
        'name' => 'Super Duper Tourney',
        'played_on' => '07/05/2014'
    ));

}
Run Code Online (Sandbox Code Playgroud)

你可能需要

composer dumpautoload
Run Code Online (Sandbox Code Playgroud)

刷新自动加载的命名空间和类.