簡介
Laravel框架提供了功能強大的關聯模型,開發者可以便捷地使用關聯模型載入或更新資料。但官方支援的關聯關係對資料格式有較強的要求。而對於一些老專案的資料庫,或是因為一些不可描述的原因導致使用了不規範的資料結構,官方的關聯模型顯得力不從心。
所以為了解決這些痛點,本擴充套件提供了一些非官方的關聯模型
,使用這些關聯模型可以便捷地進行資料庫操作
。
開發進度
目前釋出了一個0.01版本的prerelease,實現了一部分關聯模型。計劃在5月份繼續實現新功能,並且給已有的功能補全單元測試,6月釋出正式版本
。
歡迎大家提需求和pull request
目前支援的關聯模型
HasManyBySet
類似於HasMany,主模型外來鍵($foreignKey)關聯多個模型($related)
主模型外來鍵格式可以是一個set:可以是分隔符組成的字串(如1,3,4,6),或是一個陣列([1, 3, 5, 6])
主模型外來鍵可以使用訪問器append資料
* Can load relation by id array or string
*
* @param $related
* @param string|null $foreignKey Format id1, id2 | array<id>
* @param string|null $relatedKey
* @param string|callable $delimiter Default ',', allows customize function or null(for array foreignKey)
HasMorphToByMapRelation
在一些老資料庫中,很可能出現一張資源表,其中一列type(integer)表示資料型別。Laravel官方MorphTo多型關聯可以使用Relation::morphMap的方式自定義模型和morph_type間的對映。該關聯與官方效果相同,但是map是通過引數傳入的。
* Can load morphTo with customize map
*
* @param string $name
* @param string $type Same as MorphTo
* @param string $id Same as MorphTo
* @param string $ownerKey Same as MorphTo
* @param array|null $map [Morph type key name in DB => Model namespace]
HasManyBySetAndMorphToByMapRelation
前兩者的組合,適用於既需要多型關聯,並且關聯外來鍵是一個set的情況。
* Can load morphTo with customize map and id can be a set
*
* @param string $name
* @param string $type Same as MorphTo
* @param string $id Same as MorphTo
* @param string $ownerKey Same as MorphTo
* @param array|null $map Same as HasMorphToByMapRelation
* @param string|callable $delimiter Same as HasManyBySetRelationship
使用方法
composer require kamicloud/laravel-unofficial-relations`
在模型中use 對應模型的trait,一般名字為 (relations_name)Relation
use HasManyBySetRelationship;
public function test()
{
return $this->hasManyBySet(ModelName::class, 'foreign_key', 'related_key', 'delimiter')
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結