Laravel 5.6模型扩展了其他模型

时间:2018-08-17 21:49:40

标签: php laravel laravel-5 eloquent

在我的程序包中,我带有自己的命名空间的模型

<?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
}

我该怎么办?

enter image description here

因此,在控制器中,我想use App\Category;并希望访问scopeMain包模型中的subcategoriesparentvendor/nosennij/laravel-catmenubread/models/Category.php方法>

工作版本-https://github.com/n-osennij/laravel-category

1 个答案:

答案 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