[英]Problem with composer package on production server - Laravel project
My problem is BadMethodCallException when trait method calls. 当特征方法调用时,我的问题是BadMethodCallException。 The package is kalnoy/nestedset for Laravel.
该软件包是Laravel的kalnoy / nestedset。 On my local server all works perfect, but then I create my app on production server, I always have this exception: Method Illuminate\\Database\\Query\\Builder::descendants does not exist.
在我的本地服务器上,所有工作都完美无缺,但是随后我在生产服务器上创建我的应用程序,则始终遇到以下异常:方法Illuminate \\ Database \\ Query \\ Builder :: descendants不存在。
What I tried to do without result: 1. composer init 2. composer dump-autoload 3. delete and deployed project few times 4. composer require kalnoy/nestedset 5. Many hours of googling. 我试图做的没有结果的事情: 1. composer init 2. composer dump-autoload 3.删除并部署了几次项目4. composer需要kalnoy / nestedset 5.大量的谷歌搜索。 What thoughts about it?
有什么想法? Has anyone had such a problem and sloved it?
有没有人遇到过这样的问题并且喜欢它?
My model: 我的模特:
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();
}
}
Method what "doesn't exist": 方法“不存在”:
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;
}
}
My composer.json file 我的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
} }
Thanks everyone. 感谢大家。
UPDATE: Error message: 更新:错误消息:
(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
Thanks everyone who helps me. 谢谢所有帮助我的人。 I sloved this.
我喜欢这个。
The problem was in 问题出在
Category::where('active', 1)->descendants($categoryId);
The Category::where('active', 1) returns queryBuilder object, which has not descendants method, it availabe on Category (model object). Category :: where('active',1)返回queryBuilder对象,该对象没有后代方法,它可用于Category(模型对象)。
The right way is 正确的方法是
Category::descendants($categoryId);
I was embarrassed cause wrong way works on my local server. 我很尴尬,因为错误的方式在我的本地服务器上工作。 If somebody can explain this thing I would very grateful.
如果有人可以解释这件事,我将不胜感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.