【问题标题】:BadMethodCallException Call to undefined method Illuminate\Database\Query\Builder::searchable()BadMethodCallException 调用未定义的方法 Illuminate\Database\Query\Builder::searchable()
【发布时间】:2017-10-20 12:46:50
【问题描述】:

我正在尝试将一些现有记录导入到 algolia。现在将 Laravel 5.5scout 3.0.0 与 algolia-php-sdk 一起使用。当我执行php artisan scout:import "App\Listings" -v 时,它会抛出以下异常

 [BadMethodCallException]                                                  
  Call to undefined method Illuminate\Database\Query\Builder::searchable()  


Exception trace:
 () at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2457
 Illuminate\Database\Query\Builder->__call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:1273
 Illuminate\Database\Eloquent\Builder->__call() at /home/vagrant/Code/vendor/laravel/scout/src/Searchable.php:102
 App\Listings::makeAllSearchable() at /home/vagrant/Code/vendor/laravel/scout/src/Console/ImportCommand.php:43
 Laravel\Scout\Console\ImportCommand->handle() at n/a:n/a
 call_user_func_array() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29
 Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:87
 Illuminate\Container\BoundMethod::callBoundMethod() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:31
 Illuminate\Container\BoundMethod::call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/Container.php:549
 Illuminate\Container\Container->call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php:180
 Illuminate\Console\Command->execute() at /home/vagrant/Code/vendor/symfony/console/Command/Command.php:262
 Symfony\Component\Console\Command\Command->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php:167
 Illuminate\Console\Command->run() at /home/vagrant/Code/vendor/symfony/console/Application.php:888
 Symfony\Component\Console\Application->doRunCommand() at /home/vagrant/Code/vendor/symfony/console/Application.php:224
 Symfony\Component\Console\Application->doRun() at /home/vagrant/Code/vendor/symfony/console/Application.php:125
 Symfony\Component\Console\Application->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Application.php:88
 Illuminate\Console\Application->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:121
 Illuminate\Foundation\Console\Kernel->handle() at /home/vagrant/Code/artisan:35
`

我在模型中包含了Searchable trait 以及自定义插入记录的toSearchableArray() 方法。

我有另一个模型,名为Store。我可以毫无问题地将该模型导入 algolia。我已经通过this link。但是我的两个模型都扩展了相同的 basemodel 类,所以上面的链接也没有帮助我。

任何关于前进的提示将不胜感激。

编辑 代码示例

namespace App;

use App\Services\Search\Builders\ListingRecordBuilder;

use Laravel\Scout\Searchable;
.
.
.

class Listings extends BaseModel
{
    use Searchable;
.
.
.
    public function searchableAs()
    {
        return 'local_listings_new';
    }

    public function toSearchableArray()
    {
        $recordBuilder = new ListingRecordBuilder($this);

        return $recordBuilder->buildRecord();
    }
}

【问题讨论】:

  • 你导入方法了吗?
  • 嗨@HaroenViaene我已经用我使用的一些代码更新了这个问题,是的,我已经导入了这个特征并在模型中使用它,这个东西也可以与另一个模型完美配合。
  • record builder 也返回了完美的数组结构,我什至尝试过在数组中只使用一个字段

标签: php laravel-5 algolia laravel-scout


【解决方案1】:

我自己已经弄清楚了。该模型包含一个$indices 数组/属性,用于表示插入记录的 algolia 索引。同时,它还包含一个 searchableAs() 方法,该方法也执行指定 algolia 索引的相同任务。并且 $indices 数组是通过构造函数填充的,所以乍一看我无法揭示罪魁祸首。

所以简单地删除$indices 数组和构造函数初始化$indices 的代码对我有用。但仍然未知 Scout 为什么抛出 Call to undefined method::Searchable() Exception

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多