korridor / laravel-has-many-merged
为 Eloquent 定制的自定义关系,用于合并/组合多个一对一(hasMany)关系
Requires
- php: >=8.1
- illuminate/database: ^10|^11
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^8|^9
- phpunit/phpunit: ^10
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-06 12:04:53 UTC
README
为 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) 许可。有关更多信息,请参阅许可证文件。