staudenmeir/belongs-to-through
Composer 安装命令:
composer require staudenmeir/belongs-to-through
包简介
Laravel Eloquent BelongsToThrough relationships
README 文档
README
This inverse version of HasManyThrough allows BelongsToThrough relationships with unlimited intermediate models.
Supports Laravel 5.0+.
Installation
composer require staudenmeir/belongs-to-through:"^2.5"
Use this command if you are in PowerShell on Windows (e.g. in VS Code):
composer require staudenmeir/belongs-to-through:"^^^^2.5"
Versions
| Laravel | Package |
|---|---|
| 13.x | 2.18 |
| 12.x | 2.17 |
| 11.x | 2.16 |
| 10.x | 2.13 |
| 9.x | 2.12 |
| 8.x | 2.11 |
| 7.x | 2.10 |
| 6.x | 2.6 |
| 5.x | 2.5 |
Usage
Consider this HasManyThrough relationship:
Country → has many → User → has many → Post
class Country extends Model { public function posts() { return $this->hasManyThrough(Post::class, User::class); } }
Use the BelongsToThrough trait in your model to define the inverse relationship:
Post → belongs to → User → belongs to → Country
class Post extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function country(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough(Country::class, User::class); } }
You can also define deeper relationships:
Comment → belongs to → Post → belongs to → User → belongs to → Country
Supply an array of intermediate models as the second argument, from the related (Country) to the parent model (Comment):
class Comment extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function country(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough(Country::class, [User::class, Post::class]); } }
Custom Foreign Keys
You can specify custom foreign keys as the fifth argument:
class Comment extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function country(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough( Country::class, [User::class, Post::class], foreignKeyLookup: [User::class => 'custom_user_id'] ); } }
Custom Local Keys
You can specify custom local keys for the relations:
VendorCustomerAddress → belongs to → VendorCustomer in VendorCustomerAddress.vendor_customer_id
VendorCustomerAddress → belongs to → CustomerAddress in VendorCustomerAddress.address_id
You can access VendorCustomer from CustomerAddress by the following
class CustomerAddress extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function vendorCustomer(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough( VendorCustomer::class, VendorCustomerAddress::class, foreignKeyLookup: [VendorCustomerAddress::class => 'id'], localKeyLookup: [VendorCustomerAddress::class => 'address_id'], ); } }
Table Aliases
If your relationship path contains the same model multiple times, you can specify a table alias (Laravel 6+):
class Comment extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function grandparent(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough( Comment::class, Comment::class . ' as alias', foreignKeyLookup: [Comment::class => 'parent_id'] ); } }
Use the HasTableAlias trait in the models you are aliasing:
class Comment extends Model { use \Znck\Eloquent\Traits\HasTableAlias; }
Soft Deleting
By default, soft-deleted intermediate models will be excluded from the result. Use withTrashed() to include them:
class Comment extends Model { use \Znck\Eloquent\Traits\BelongsToThrough; public function country(): \Znck\Eloquent\Relations\BelongsToThrough { return $this->belongsToThrough(Country::class, [User::class, Post::class]) ->withTrashed('users.deleted_at'); } } class User extends Model { use SoftDeletes; }
Contributing
Please see CONTRIBUTING and CODE OF CONDUCT for details.
Credits
staudenmeir/belongs-to-through 适用场景与选型建议
staudenmeir/belongs-to-through 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.43M 次下载、GitHub Stars 达 1.27k, 最近一次更新时间为 2019 年 02 月 01 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 staudenmeir/belongs-to-through 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 staudenmeir/belongs-to-through 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 10.43M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1269
- 点击次数: 23
- 依赖项目数: 25
- 推荐数: 1
其他信息
- 授权协议: MIT
- 更新时间: 2019-02-01