更新到 Laravel 5.3 后播种时调用未定义的方法 Illuminate\Database\Query\Builder::lists()

Posted

技术标签:

【中文标题】更新到 Laravel 5.3 后播种时调用未定义的方法 Illuminate\\Database\\Query\\Builder::lists()【英文标题】:Call to undefined method Illuminate\Database\Query\Builder::lists() when seeding after updating to Laravel 5.3更新到 Laravel 5.3 后播种时调用未定义的方法 Illuminate\Database\Query\Builder::lists() 【发布时间】:2016-12-31 01:17:58 【问题描述】:

我正在更新到 laravel 5.3,我收到以下消息:

[2016-08-23 23:12:39] local.ERROR: BadMethodCallException: Call to undefined method Illuminate\Database\Query\Builder::lists() in /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2431
Stack trace:
#0 [internal function]: Illuminate\Database\Query\Builder->__call('lists', Array)
#1 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1423): call_user_func_array(Array, Array)
#2 /home/vagrant/Code/vendor/cviebrock/eloquent-sluggable/src/SluggableTrait.php(254): Illuminate\Database\Eloquent\Builder->__call('lists', Array)
#3 /home/vagrant/Code/vendor/cviebrock/eloquent-sluggable/src/SluggableTrait.php(170): App\User->getExistingSlugs('nouseratnouser-...')
#4 /home/vagrant/Code/vendor/cviebrock/eloquent-sluggable/src/SluggableTrait.php(312): App\User->makeSlugUnique('nouseratnouser-...')
#5 /home/vagrant/Code/vendor/cviebrock/eloquent-sluggable/src/SluggableServiceProvider.php(72): App\User->sluggify()
#6 [internal function]: Cviebrock\EloquentSluggable\SluggableServiceProvider->Cviebrock\EloquentSluggable\closure(Object(App\User))
#7 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(221): call_user_func_array(Object(Closure), Array)
#8 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(164): Illuminate\Events\Dispatcher->fire('eloquent.saving...', Array, true)
#9 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1664): Illuminate\Events\Dispatcher->until('eloquent.saving...', Object(App\User))
#10 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1456): Illuminate\Database\Eloquent\Model->fireModelEvent('eloquent.saving...')
#11 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(562): Illuminate\Database\Eloquent\Model->save()
#12 /home/vagrant/Code/database/seeds/UserSeeder.php(34): Illuminate\Database\Eloquent\Model::create(Array)
#13 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Seeder.php(39): UserSeeder->run()
#14 /home/vagrant/Code/database/seeds/DatabaseSeeder.php(37): Illuminate\Database\Seeder->call('UserSeeder')
#15 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php(63): DatabaseSeeder->run()
#16 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2279): Illuminate\Database\Console\Seeds\SeedCommand->Illuminate\Database\Console\Seeds\closure()
#17 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php(64): Illuminate\Database\Eloquent\Model::unguarded(Object(Closure))
#18 [internal function]: Illuminate\Database\Console\Seeds\SeedCommand->fire()
#19 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#20 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)
#21 /home/vagrant/Code/vendor/symfony/console/Command/Command.php(256): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 /home/vagrant/Code/vendor/symfony/console/Application.php(818): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 /home/vagrant/Code/vendor/symfony/console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Database\Console\Seeds\SeedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /home/vagrant/Code/vendor/symfony/console/Application.php(117): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#26 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(111): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /home/vagrant/Code/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 main  

我检查了导致它的代码:

        User::create([
        'name' => 'No User',
        'email' => 'nouser@nouser.com',
        'password' => bcrypt('0'),
        'provider' => '0',
    ]);

我不明白为什么。

如果我评论它,我会在另一个文件中遇到同样的问题:

        Tournament::create([
        'user_id' => 1,
        'name' => "name",
        'dateIni' =>  $dateIni,
        'dateFin' =>  $dateIni,
    ]);

我在全球范围内搜索了“列表”但没有成功...

知道为什么会这样吗???

【问题讨论】:

请你把整个错误改成 我在控制台中有它,这就是我没有完整日志的原因 github.com/cviebrock/eloquent-sluggable/issues/302 我想我明白了,你可以把它作为答案! 使用像 Laravel Shift 这样的服务是确保你的 Laravel 应用程序完全升级的好方法,包括像这样的弃用陷阱。 【参考方案1】:

lists() 已弃用。请改用pluck()

Collection、查询构建器和 Eloquent 查询上的 lists 方法 构建器对象已重命名为采摘。方法签名 保持不变。

https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0

【讨论】:

我需要你的帮助。看这里:***.com/questions/41887504/… 很高兴看到您如何找到解决 OP 问题的方法并获得0(零!)赞成票。还有两个人在 5 小时和 30 小时内发布了完全相同的帖子,他们得到了 2712 的点赞。 我也不知道。为什么会这样?也许我的英语不好,我的问题也不太好 大声笑@AlexeyMezenin 他们喜欢复制,过去你应该总是过去一个例子^^【参考方案2】:

您可以使用方法pluck。在 Laravel 5.3 中删除了方法 lists。 我将lists('key')->all() 更改为pluck('key')->all(),现在可以使用了。

【讨论】:

你好桑在你用列表替换 pluck 的地方,我在 eloquent 类的 create 方法中遇到了同样的问题,但不明白我必须在哪里用列表替换 pluck 您好 Junaid,您需要替换使用 lists 方法的位置。 感谢您的回复我实际上通过升级 eloquent-sluggable 库解决了我的问题【参考方案3】:

Laravel 5.3,lists() 方法被移除,取而代之的是 pluck() 方法。例如:

$userList = App\User::pluck('name', 'id');

【讨论】:

看来你是 laravel 高手了。我需要你帮忙。看这里:***.com/questions/41047583/…【参考方案4】:
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
class ApiController extends Controller

    public function data()
    
        $data = team::all();
        return $data;    
    

【讨论】:

感谢您的帮助,您能否尝试提供任何解释,以便用户更好地理解这对您来说是一个很好的答案?

以上是关于更新到 Laravel 5.3 后播种时调用未定义的方法 Illuminate\Database\Query\Builder::lists()的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 PHP 致命错误:未捕获的错误:在 laravel 版本更新时调用未定义的方法 Illuminate\Container\Container::basePath() 错误?

Laravel Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法

如何使用数据库将数据从一个表导入另一个表:播种? (laravel 5.3)?

连接 SAP Hana 数据库时调用未定义函数 odbc_connect() 消息

未捕获的错误:连接到数据库时调用未定义的函数 mysqli_connect() [重复]

从 Laravel 5.2 更新到 5.3 后,调用数组上的成员函数 all()