首页 > 解决方案 > Laravel 5.6 模型扩展了其他模型

问题描述

在我的包中,我提供了带有自己命名空间的模型

<?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,方法parentvendor/nosennij/laravel-catmenubread/models/Category.php

工作变体 - https://github.com/n-osennij/laravel-category

标签: phplaravellaravel-5eloquent

解决方案


在你的包中移动你的models目录src并大写M例如src/Models/Category.php

然后将命名空间更改Category为:

namespace Nosennij\LaravelCategoryMenuAndBreadcrumbs\Models;

然后在您Category的应用程序目录中的类中将其更改为:

use Nosennij\LaravelCategoryMenuAndBreadcrumbs\Models\Category as ParentCategory;

class Category extends ParentCategory

推荐阅读