no4 / compoships53
Laravel 5.3 支持组合/多键关系
Requires
- php: >=5.6.4
- illuminate/cache: ~5.3
- illuminate/console: ~5.3
- illuminate/database: ~5.3
- illuminate/support: ~5.3
Requires (Dev)
- fzaninotto/faker: ^1.8
- laravel/laravel: ~5.3
- phpunit/phpunit: 5.*
Suggests
- awobaz/blade-active: Blade directives for the Laravel 'Active' package
- awobaz/eloquent-auto-append: Automatically append accessors to model serialization
- awobaz/eloquent-mutators: Reusable mutators (getters/setters) for Laravel 5's Eloquent
- awobaz/syntactic: Syntactic sugar for named and indexed parameters call.
This package is auto-updated.
Last update: 2024-09-26 20:35:50 UTC
README
Compoships 允许在 Laravel 5 的 Eloquent 中基于两列(或更多)指定关系。当使用第三方或现有架构/数据库时,通常需要在 Eloquent 关系定义中匹配多列。
问题
Eloquent 不支持组合键。因此,无法通过匹配多个列来定义一个模型到另一个模型的关系。当尝试使用 where 子句
(如下例所示)进行预加载关系时,将不起作用,因为在处理关系时,$this->f2 为空。
namespace App; use Illuminate\Database\Eloquent\Model; class Foo extends Model { public function bars() { //WON'T WORK WITH EAGER LOADING!!! return $this->hasMany('Bar', 'f1', 'f1')->where('f2', $this->f2); } }
相关讨论
- 多键关系
- 查询关系时,额外条件未按预期工作
- 在 Eager Loading 中查询关系时,额外条件未按预期工作
- 具有两个外键的 BelongsTo 关系
- Laravel Eloquent:关系的多外键
- Laravel hasMany 关联的多列
安装
安装 Compoships 的推荐方法是使用 Composer
$ composer require awobaz/compoships
用法
使用 Awobaz\Compoships\Database\Eloquent\Model
类
只需让您的模型类继承自 Awobaz\Compoships\Database\Eloquent\Model
基类。 Awobaz\Compoships\Database\Eloquent\Model
扩展了 Eloquent
基类,而不改变其核心功能。
使用 Awobaz\Compoships\Compoships
特性
如果您无法从 Awobaz\Compoships\Database\Eloquent\Model
继承模型,您可以使用 Awobaz\Compoships\Compoships
特性。只需在模型中使用该特性。
注意:要定义从模型 A 到另一个模型 B 的多列关系,两个模型都必须继承自 Awobaz\Compoships\Database\Eloquent\Model
或使用 Awobaz\Compoships\Compoships
特性
语法
...现在我们可以通过匹配两列或更多列(通过传递列数组而不是字符串)来定义从模型 A 到另一个模型 B 的关系。
namespace App; use Illuminate\Database\Eloquent\Model; class A extends Model { use \Awobaz\Compoships\Compoships; public function b() { return $this->hasMany('B', ['f1', 'f2'], ['f1', 'f2']); } }
我们可以使用相同的语法来定义关系的反方向
namespace App; use Illuminate\Database\Eloquent\Model; class B extends Model { use \Awobaz\Compoships\Compoships; public function a() { return $this->belongsTo('A', ['f1', 'f2'], ['f1', 'f2']); } }
支持的关系
Compoships 只支持以下 Laravel 5 的 Eloquent 关系
- hasOne
- HasMany
- belongsTo
免责声明
Compoships 不提供 Laravel 5 的 Eloquent 中组合键的支持。本软件包仅提供根据多列指定关系的能力。我们认为所有模型的表都应该有一个单一的主键。但在某些情况下,即使模型的表只有一个主键,您也需要在关系定义中匹配许多列。
贡献
请阅读 CONTRIBUTING.md 以了解我们的行为准则以及提交拉取请求的流程。
版本控制
我们使用 SemVer 进行版本控制。有关可用的版本,请参阅 本存储库的标签。
单元测试
要运行测试套件,请安装开发依赖项
$ composer install --dev
然后,运行以下命令
$ vendor/bin/phpunit
作者
- Claudin J. Daniel - 初始工作
赞助商
- Awobaz - 加拿大蒙特利尔市的Web/Mobile代理机构
许可证
Compoships53 遵循MIT许可证。