korridor/laravel-has-many-merged

为 Eloquent 定制的自定义关系,用于合并/组合多个一对一(hasMany)关系

1.1.0 2024-02-29 15:33 UTC

This package is auto-updated.

Last update: 2024-09-06 12:04:53 UTC


README

Latest Version on Packagist License GitHub Workflow Lint GitHub Workflow Tests Codecov

为 Eloquent 定制的自定义关系,用于合并/组合多个一对一(hasMany)关系。这种关系完全支持懒加载和预加载。

注意

请查看 solidtime - 现代开源时间追踪器,链接为 solidtime.io

安装

您可以使用以下命令通过 composer 安装此包:

composer require korridor/laravel-has-many-merged

如果您想使用较旧的 Laravel/PHP 版本,请安装 0.* 版本。

composer require korridor/laravel-has-many-merged "^0"

要求

此包针对以下 Laravel 版本进行了测试:

  • 10.* (PHP 8.1, 8.2, 8.3)
  • 11.* (PHP 8.2, 8.3)

使用示例

在以下示例中,有两个模型 User 和 Message。每条消息都有一个发送者和接收者。User 模型有两个 hasMany 关系 - 一个用于发送的消息,另一个用于接收的消息。

使用此插件,您可以添加一个包含用户发送和接收消息的关系。

use Korridor\LaravelHasManyMerged\HasManyMerged;
use Korridor\LaravelHasManyMerged\HasManyMergedRelation;

class User extends Model
{
    use HasManyMergedRelation;
    
    // ...

    /**
     * @return HasManyMerged<Message>
     */
    public function messages(): HasManyMerged
    {
        return $this->hasManyMerged(Message::class, ['sender_user_id', 'receiver_user_id']);
    }

    /**
     * @return HasMany<Message>
     */
    public function sentMessages(): HasMany
    {
        return $this->hasMany(Message::class, 'sender_user_id');
    }

    /**
     * @return HasMany<Message>
     */
    public function receivedMessages(): HasMany
    {
        return $this->hasMany(Message::class, 'receiver_user_id');
    }
}

贡献

我欢迎建议和贡献。只需创建一个问题或 pull request。

本地 Docker 环境

“docker” 文件夹包含用于开发的本地 Docker 环境。Docker 工作区已安装 composer 和 xdebug。

docker-compose run workspace bash

测试

运行 composer test 命令使用 phpunit 运行所有测试。运行 composer test-coverage 命令使用 phpunit 运行所有测试,并在“coverage”文件夹中创建覆盖率报告。

代码格式化/代码检查

运行 composer fix 命令使用 php-cs-fixer 格式化代码。运行 composer lint 命令使用 phpcs 检查代码。

许可证

此包受 MIT 许可证 (MIT) 许可。有关更多信息,请参阅许可证文件