【问题标题】:Problem with composer package on production server - Laravel project生产服务器上的作曲家包问题 - Laravel 项目
【发布时间】:2019-04-05 01:15:57
【问题描述】:

我的问题是 trait 方法调用时出现 BadMethodCallException。 该软件包是 Laravel 的 kalnoy/nestedset。在我的本地服务器上一切正常,但后来我在生产服务器上创建我的应用程序,我总是有这个例外: 方法 Illuminate\Database\Query\Builder::descendants 不存在。

我尝试做的事情没有结果: 1.作曲家初始化 2. 作曲家转储-自动加载 3. 多次删除和部署项目 4. composer需要kalnoy/nestedset 5. 数小时的谷歌搜索。 对此有何想法?有没有人遇到过这样的问题并解决过?

我的模特:

namespace App;

use Illuminate\Database\Eloquent\Model,
    Kalnoy\Nestedset\NodeTrait;

class Category extends Model
{
    use NodeTrait;

    protected $table = 'categories';

    public function getOnMainItems($limit = 6)
    {
        return Category::where('main', 1)->limit($limit)->get();
    }
}

方法什么“不存在”:

namespace App\Services;

use App\Category;
use Kalnoy\Nestedset\Collection;

class CategoryService
{

    /**
     * @param string $slug
     * @return array $categories
     */
    public function getCatalogCategoriesForFilter(string $slug = '')
    {
        $categories = [];
        if ($slug !== '') {
            $currentCategory = Category::where([['category_slug', $slug], ['active', 1]])->limit(1)->get();
            $categoriesByParent = Category::defaultOrder()->descendantsOf($currentCategory[0]->id);
            foreach ($categoriesByParent as $category) {
                $categories[] = $category->id;
            }
        }
        return $categories;
    }
}

我的 composer.json 文件

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": "^7.1.3",
    "darryldecode/cart": "~4.0",
    "doctrine/dbal": "^2.8",
    "fideloper/proxy": "^4.0",
    "kalnoy/nestedset": "^4.3",
    "laravel/framework": "5.6.*",
    "laravel/tinker": "^1.0",
    "predis/predis": "^1.1"
},
"require-dev": {
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
},
"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},
"extra": {
    "laravel": {
        "dont-discover": [
        ]
    }
},
"scripts": {
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate"
    ],
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@php artisan package:discover"
    ]
},
"config": {
    "preferred-install": "dist",
    "sort-packages": true,
    "optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true

}

谢谢大家。

更新: 错误信息:

(1/1) BadMethodCallException
Method Illuminate\Database\Query\Builder::descendants does not exist.

in Builder.php line 2816
at Builder->__call('descendants', array(2))
in Builder.php line 1286
at Builder->__call('descendants', array(2))
in CategoryService.php line 38
at CategoryService->getCatalogCategories('postelnoe-bele')
in GoodsController.php line 41

【问题讨论】:

  • 后代是查询范围吗?还有什么?
  • 请用代码而不是屏幕截图更新问题。能否包含完整、准确的错误消息?
  • @Devon 我认为 - descendants 方法获取类别的所有后代,其 id 从参数转移。
  • @Devon 是我认为的查询范围 :)
  • @TravisBritz 更新它。

标签: php laravel composer-php


【解决方案1】:

感谢所有帮助我的人。 我喜欢这个。

问题出在

Category::where('active', 1)->descendants($categoryId);

Category::where('active', 1) 返回 queryBuilder 对象,它没有后代方法,它在 Category(模型对象)上可用。

正确的方法是

Category::descendants($categoryId);

我很尴尬,因为错误的方式在我的本地服务器上运行。如果有人能解释这件事,我将不胜感激。

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 2013-02-02
    • 2015-09-01
    • 1970-01-01
    • 2020-08-17
    • 2016-07-07
    • 2017-07-30
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多