在我的程序包中,我带有自己的命名空间的模型
<?php
namespace Nosennij\LaravelCategoryMenuAndBreadcrumbs\models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function scopeMain($query)
{
return $query->where('parent_id', 0);
}
public function subcategories(){
return $this->hasMany(Category::class, 'parent_id');
}
public function parent(){
return $this->belongsTo(Category::class, 'parent_id');
}
}
在安装软件包时,如果我不将此模型复制到app文件夹并且不将命名空间更改为App,那将是很好的。最好从封装所有父方法的包扩展此模型。我尝试以另一种方式
1)php artisan make:model Category
2)尝试扩展
namespace App;
use Illuminate\Database\Eloquent\Model;
use Nosennij\LaravelCategoryMenuAndBreadcrumbs\models\Category as ParentCategory;
class Category extends ParentCategory
{
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
parent::boot();
}
//my own new methods or methods rewriting parent methods
}
我该怎么办?
因此,在控制器中,我想use App\Category;
并希望访问scopeMain
包模型中的subcategories
,parent
,vendor/nosennij/laravel-catmenubread/models/Category.php
方法>
答案 0 :(得分:1)
在软件包中,将models
目录移至src
下并大写M
,例如src/Models/Category.php
。
然后将Category
中的命名空间更改为:
namespace Nosennij\LaravelCategoryMenuAndBreadcrumbs\Models;
然后在应用目录中的Category
类中将其更改为:
use Nosennij\LaravelCategoryMenuAndBreadcrumbs\Models\Category as ParentCategory;
class Category extends ParentCategory