🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### [](https://octobercms.com/docs/database/relations#defining-relationships)定义关系 模型关系定义为模型类上的属性。定义关系的示例: ~~~ class User extends Model { public $hasMany = [ 'posts' => 'Acme\Blog\Models\Post' ] } ~~~ 关系像模型本身一样,也可以充当强大的[查询生成器](https://octobercms.com/docs/database/query),可以通过提供功能强大的方法链接和查询功能的函数来访问关系。例如: ~~~ $user->posts()->where('is_active', true)->get(); ~~~ 也可以将关系作为属性来访问: ~~~ $user->posts; ~~~ > **注意**:默认情况下,所有关系查询都[启用](https://octobercms.com/docs/database/query#in-memory-caching)了[内存中缓存](https://octobercms.com/docs/database/query#in-memory-caching)。该`load($relation)`方法不会强制刷新缓存。要重新加载内存缓存,请使用模型对象上的`reloadRelations()`或`reload()`方法。 ### [](https://octobercms.com/docs/database/relations#detailed-relationships)详细定义 每个定义可以是一个数组,其中键是关系名称,值是一个明细数组。detail数组的第一个值始终是相关的模型类名称,而所有其他值都是必须具有键名的参数。 ~~~ public $hasMany = [ 'posts' => ['Acme\Blog\Models\Post', 'delete' => true] ]; ~~~ 以下是可用于所有关系的参数: | 论据 | 描述 | | --- | --- | | **order** | 多个记录的排序顺序。 | | **conditions** | 使用原始的where查询语句过滤关系。 | | **scope** | 使用提供的范围方法过滤关系。 | | **push** | 如果设置为false,则不会通过`push`,默认值:true保存此关系。 | | **delete** | 如果设置为true,则如果删除主要模型或破坏关系,则将删除相关模型,默认值:false。 | | **count** | 如果设置为true,则结果`count`仅包含用于计数关系的列,默认值:false。 | 使用**顺序**和**条件的**示例过滤器: ~~~ public $belongsToMany = [ 'categories' => [ 'Acme\Blog\Models\Category', 'order' => 'name desc', 'conditions' => 'is_active = 1' ] ]; ~~~ 使用**范围的**示例过滤器: ~~~ class Post extends Model { public $belongsToMany = [ 'categories' => [ 'Acme\Blog\Models\Category', 'scope' => 'isActive' ] ]; } class Category extends Model { public function scopeIsActive($query) { return $query->where('is_active', true)->orderBy('name', 'desc'); } } ~~~ 使用**count的**示例过滤器: ~~~ public $belongsToMany = [ 'users' => ['Backend\Models\User'], 'users_count' => ['Backend\Models\User', 'count' => true] ]; ~~~