【问题标题】:Laravel Seeder, call to undefined method ::createLaravel Seeder,调用未定义的方法 ::create
【发布时间】:2014-06-24 13:29:00
【问题描述】:

我有一个不同型号的 Seeder,当我尝试 artisan db:seed 时,其中一个给我以下错误

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

这里是 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');
    }

}

注意:我添加了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');

这让我相信 $event_1 = Event::create 行上发生了错误,但我无法弄清楚它看起来与 $deck_1... 和 $deck_2... 使用的代码完全一样。

【问题讨论】:

    标签: php laravel model


    【解决方案1】:

    Event 是 Laravel 中的“保留”字眼。您可能需要更改它或命名您的类。

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

    它实际上是我们在 app/config/app.php 上的别名。

    命名空间:

    <?php namespace App;
    
    use Eloquent;
    
    class Event extends Eloquent {
    
       ...
    
    }
    

    在命名空间中使用它:

    <?php
    
    use App\Event;
    
    class Whatever {
    
        $event_1 = Event::create(array(
            'name' => 'Super Duper Tourney',
            'played_on' => '07/05/2014'
        ));
    
    }
    

    你可能需要

    composer dumpautoload
    

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

    【讨论】:

    • 这解释了为什么我得到的错误来自一些随机文件,这很有意义!我做了namespace App;use App\Event;,但现在运行db:seed 时得到Class 'App\Event not found'。我是否需要启用其他任何东西才能使用命名空间?
    • 是的,作曲家 dumpautoload。已编辑。
    • 完美!还要添加在事件中使用use Eloquent,否则我会遇到类似的错误,但找不到 Eloquent。现在一切看起来都很好,谢谢!
    • 是的,很抱歉。已编辑,因此人们不会遇到同样的错误。
    • 原来我得到了一个类似的错误(当它到达events()-&gt;attach关于未定义的方法Illuminate\Support\Facades\Event::newQuery()。newQuery()来自Eloquent\Model我假设它被@987654334调用@? 我还需要修复 events() 的命名空间吗?
    猜你喜欢
    • 2017-02-06
    • 2023-03-07
    • 2017-02-14
    • 2019-11-02
    • 2018-10-28
    • 2018-11-09
    • 2018-07-27
    • 2019-10-15
    • 2013-10-23
    相关资源
    最近更新 更多