uisits / compoships
Laravel关系,支持复合/多键
Requires
- php: ^7.1.3
- illuminate/cache: 5.7.28
- illuminate/console: 5.7.28
- illuminate/database: 5.7.28
- illuminate/support: 5.7.28
Requires (Dev)
- fzaninotto/faker: ^1.8
- laravel/laravel: 5.7.*
- phpunit/phpunit: ^7.0
Suggests
- uisits/blade-active: Blade directives for the Laravel 'Active' package
- uisits/eloquent-auto-append: Automatically append accessors to model serialization
- uisits/eloquent-mutators: Reusable mutators (getters/setters) for Laravel 5's Eloquent
- uisits/syntactic: Syntactic sugar for named and indexed parameters call.
This package is auto-updated.
Last update: 2024-09-29 04:25:33 UTC
README
此包是awobaz/compoships的精确副本。此包仅提供对Laravel版本^5.7的支持。
Compoships为Laravel 5的Eloquent提供了根据两个(或更多)列指定关系的能力。当与第三方或现有模式/数据库一起工作时,经常需要在Eloquent关系的定义中匹配多个列。
问题
Eloquent不支持复合键。因此,无法通过匹配多个列来定义一个模型到另一个模型的关系。尝试使用where子句
(如下例所示)在预加载关系时将不会工作,因为在处理关系时,$this->f2是null。
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); } }
相关讨论
- 多键关系
- 带有额外条件的查询关系未按预期工作
- 在预加载中带有额外条件的查询关系未按预期工作
- 具有两个外键的BelongsTo关系
- Laravel Eloquent:关系的多个外键
- Laravel hasMany关联的多列
安装
推荐通过Composer安装Compoships
。
$ composer require uisits/compoships
使用方法
使用uisits\Compoships\Database\Eloquent\Model
类
只需让您的模型类继承自uisits\Compoships\Database\Eloquent\Model
基类。此uisits\Compoships\Database\Eloquent\Model
扩展了Eloquent
基类而不更改其核心功能。
使用uisits\Compoships\Compoships
特性
如果由于某些原因您不能从uisits\Compoships\Database\Eloquent\Model
继承模型,您可以使用uisits\Compoships\Compoships
特性。只需在模型中使用此特性。
注意:要定义从模型A到另一个模型B的多列关系,两个模型都必须继承自uisits\Compoships\Database\Eloquent\Model
或使用uisits\Compoships\Compoships
特性。
语法
...现在我们可以通过匹配两个或多个列(通过传递列数组而不是字符串)来从模型A定义到模型B的关系。
namespace App; use Illuminate\Database\Eloquent\Model; class A extends Model { use \uisits\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 \uisits\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