BadMethodCallException : 方法 Illuminate\Database\Query\Builder::offers 不存在

Posted

技术标签:

【中文标题】BadMethodCallException : 方法 Illuminate\\Database\\Query\\Builder::offers 不存在【英文标题】:BadMethodCallException : Method Illuminate\Database\Query\Builder::offers does not existBadMethodCallException : 方法 Illuminate\Database\Query\Builder::offers 不存在 【发布时间】:2020-02-24 11:38:54 【问题描述】:

我正在尝试在 Laravel 5.6.39 上执行 php artisan db:seed 并遇到错误:

BadMethodCallException : 方法 Illuminate\Database\Query\Builder::offers 不存在。

提供型号代码:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Offer extends Model

    protected $guarded = [];

    public function task()
    
        return $this->belongsTo(Task::class);
    

    public function user()
    
        return $this->belongsTo(User::class);
    


任务模型

public function offers()

    return $this->hasMany(Offer::class);

数据库种子文件

factory(App\Task::class, 10)->create()->each(function ($task) 
    return $task->offers()->save(factory(App\Offer::class)->make());
);

我做错了什么?

【问题讨论】:

好吧,似乎认为App\Task 上没有offers 方法 @lagbox 你能更详细一点吗?谢谢, 嗯,第一件事是你怎么知道你从播种机显示的代码导致了这个? 当我注释掉下面的代码并运行db:seed时,不会出现错误 factory(App\Task::class, 10)->create()->each(function ($task ) return $task->offers()->save(factory(App\Offer::class)->make()); ); PHP 似乎不认为App\Taskoffers 方法或者可见性不是public 【参考方案1】:

将您的 DatabaseSeeder 更新为此并检查

factory(App\Task::class, 10)->create()->each(function ($task) 
    return $task->offers()->save(factory(App\Offer::class)->create());
);

【讨论】:

@DanielOmara 如果通过php artian serve,您将如何运行应用程序然后重新启动它

以上是关于BadMethodCallException : 方法 Illuminate\Database\Query\Builder::offers 不存在的主要内容,如果未能解决你的问题,请参考以下文章

删除()上的 Laravel BadMethodCallException

BadMethodCallException : 方法 Illuminate\Database\Query\Builder::offers 不存在

BadMethodCallException 调用未定义的方法 App\Models\User::hasAnyRole()

Laravel 2 BadMethodCallException 实例:'int 不存在'和'方法不存在'

BadMethodCallException

在 Eloquent 模型上调用块时 /bootstrap/cache/compiled.php 中的 BadMethodCallException