【问题标题】:How to implements app models (class) in vendor package class?如何在供应商包类中实现应用模型(类)?
【发布时间】:2021-05-05 15:41:09
【问题描述】:

如何在我的供应商包中使用另一个类? 我想实现“可搜索”和“可查看”并将我的 Seo morphOne 关系添加到像 Rinvex\Categorizable 这样的包中,如果不向这个包中添加代码{从供应商包之外},我该如何做到这一点??

【问题讨论】:

  • 将其添加到 composer.json 文件中的依赖项中。如果它不在使用您的包的项目中,它将被拉入(供应商目录)。
  • 你能给我举个例子吗? @Tpojka
  • rinvex/laravel-categories 包含在你的包的 composer.json 文件的依赖项列表中。此外,您必须在安装步骤中提及必须先完成rinvex/laravel-categories 安装步骤必须完成的操作。

标签: php laravel package vendor


【解决方案1】:

您可以尝试从您需要的包中扩展类并在那里添加关系。 像这样:

namespace App\Models;

use App\Models\Product;
use Spatie\Searchable\Searchable;
use CyrildeWit\EloquentViewable\Contracts\Viewable;
use Rinvex\Categories\Models\Category as RinvexCategory;

class Category extends RinvexCategory implements Searchable, Viewable
{
    // Add relactions, override RinvexCategory methods or anything that you need :)
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

并在您的其他代码中使用App\Models\Category

【讨论】:

    【解决方案2】:

    您可以在您的应用中创建模型并扩展包(供应商)模型。然后定义你想要的任何东西,添加新的特征或者你可以覆盖方法。 您可以使用您的模型而不是软件包提供的模型。

    例如:

    use Rinvex\Categories\Models\Category;
    
    class MyModel extends Category {
    
      use MyExampleTraits, SearchableTraits;
    
      // You can add a new column to the table by publishing package migrations
     // or you can create a new migration to add your new columns
     
      public function seo() {
          return $this->morphOne(Seo::class, 'seoable');
      }
    }
    

    请注意,上面的代码只是为了给你提示的演示。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多