首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分的实体)

以下是自引用表的数据库关系图: ok,下面开始介绍从零创建一个Code First版的自引用模型. 1、往目标项目中添加EF包,通过NuGet程序包添加 导入相关的程序集. 2、创建自引用实体类...{ base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasMany...context = new EF6RecipesContext()) { var first = new Category { Name = "第一级菜单..." }; var second = new Category { Name = "第二级菜单" }; first.Subcategories.Add...,则跳出递归循环 } 简单解释下测试代码的逻辑: (1)、从所有的节点中获取没有父节点的节点,该节点为顶级节点 (2)、然后通过递归将该顶级节点下面的所有的子节点全部遍历出来,每当递归到的节点含有子节点集合

90360

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的关联关系抽象到了...说了这么多下面我们就通过实际示例出发深入到底层看看模型关联是如何解决数据关联匹配和加载关联数据的。 在开发中我们经常遇到的关联大致有三种:一对一,一对多和多对多,其中一对一是一种特殊的一对多关联。...为了阅读方便我们把这几个有继承关系类的构造方法放在一起,看看定义一对多关返回的HasMany实例时都做了什么。...动态属性加载关联模型 上面我们定义了三种使用频次比较高的模型关联,下面我们再来看一下在使用它们时关联模型时如何加载出来的。...,在获取关联模型时给关系应用约束的 addEagerConstraints方法是在具体的关联类中定义的,我们可以看下HasMany类的这个方法。

9.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)

    在数据库设计中,常常会有如下这种关联模型,分类表中一条分类对应多个商品表中的商品 如果要获得分类表中每条分类 以及 对应的商品的信息,则需要先查询分类表中的数据,然后根据结果遍历查询商品表,最后把数据拼接在一起...在分类表中创建关联 namespace app\common\model; class Category extends Base { public function goods(){ return $this->hasMany...,如果我们需要动态隐藏字段,或者给记录排序时可以这么做 class Category extends Model { public function product(){ return $this->hasMany...理论上可以在关联的两张表中建立关联关系,例如用户表User 和用户信息表 Profile 是一对一的关系,假设在Profile表中user_id字段指向User表的id字段,那么在User表中可以建立外键...function user(){ return $this->belongsTo('user','user_id','id'); } 建立原则:在哪张表中调用就在哪张表中建立,例如,通常情况下我们是希望通过查找用户

    1.5K20

    3分钟短文:Laravel 模型一对一关联关系这俩啥区别

    Phone 到 User 的对应关系,如下: class Phone extends Model { /** * 通过 phone 查找对应 user */ public...因为关联关系的第二个,第三个参数,根本没有填写。所以这样对比是不直观的。 hasOne 和 belongsTo 最大的不同,是哪一方持有关系的外键。...->phones 会返回一个 Phone 模型的集合 return $this->hasMany('Phone'); } } 那么反过来,我们在 phone 表内使用 user_id 存储用户的...写在最后 本文通过几个实例介绍了数据库模型的一对一,一对多,以及反向关联关系, 大家记住一点,belongsTo 是根据当前表存储的外键,去主表内查找记录,而且是返回一个模型对象,或者null。...至于 hasOne hasMany 则是定义的主表的关系。大家多多练习体会一下。

    2.7K20

    3分钟短文 | Laravel获取关联表指定列的3个方法

    今天我们说一说,在Laravel中,如何关联模型,以及制定返回列,以精简返回数据。 学习时间 假如有两个模型 User 和 Post,一个用户会发布多个post,也就是一对多的关联关系。...在User模型中,指定此关系: public function post(){ return $this->hasmany('Post'); } 反过来,在Post模型中,必然有一个发布者,是一对一的映射...with语句 模型的with语句用于调用模型内声明的关联关系,其实它接收一个数组,可以在查询时关联多张表,同时支持一个闭包,用于对关联表的查询语句进行裁切。...关联关系 我们注意到,在关联关系的声明上,第一节仅使用了 belongTo,hasMany 这样的属性,其实还可以链式调用。这样对于所有使用 with 语句关联的模型查询,都会生效。...:-( 写在最后 本文通过2种确切可用的方式,裁剪了关联模型返回列的内容。 在实际代码中,第一种使用闭包修剪SQL语句,用途较为广泛。 第二种方式影响全局,一般不推荐。

    2K20

    玩转 PhpStorm 系列(二):导航篇

    导航到指定的类/Trait成员方法或者独立的 PHP 函数也是在同一个操作界面操作,比如我们想要查看 Laravel 自带的分页方法底层是如何实现的,可以在输入框输入 paginate,然后选择我们想要查看的方法实现即可...再比如,我们想要查看 Laravel 自带的 view 函数是如何实现的,在输入框输入 view 并选中要导航的方法即可: ?...$this->hasMany(Post::class, 'user_id'); } 如果我们想要查看 hasMany 方法对应的实现代码,可以按住 Command 键(Windows 下对应的是 Ctrl...键),然后鼠标/触摸屏点击 hasMany 方法,即可跳转到对应的方法实现代码: ?...看完之后,想要快速切换回调用它的 posts 方法,通过快捷键 Command + [(切到操作序列中上一步代码的位置)即可,如果想再看看 hasMany 方法实现,通过 Command + ](切到操作序列中下一步代码的位置

    2.2K10

    PHP-web框架Laravel-Eloquent ORM(二)

    三、模型关联Laravel框架中的Eloquent ORM提供了方便的模型关联功能,用于定义不同表之间的关联关系。下面是几个常用的模型关联类型。...User模型中定义phone方法和在Phone模型中定义user方法,实现了这两个模型之间的一对一关联关系。...Post模型中定义comments方法和在Comment模型中定义post方法,实现了这两个模型之间的一对多关联关系。...其中,hasMany方法表示一个Post模型拥有多个Comment模型,belongsTo方法表示一个Comment模型属于一个Post模型。多对多关联多对多关联表示两个模型之间存在多对多的关联关系。...User模型中定义roles方法和在Role模型中定义users方法,实现了这两个模型之间的多对多关联关系。

    63341

    Sequelize 系列教程之一对多模型关系

    数据模型中的表关系一般有三种:一对一、一对多、多对多。Sequelize 为开发者提供了清晰易用的接口来定义关系、进行表之间的操作。本文我们将介绍在 Sequelize 中如何定义一对多的表关系。...Project 模型(作为参数传递的模型)是 target 。 HasMany 一对多关联将一个来源与多个目标连接起来。 而多个目标接到同一个特定的源。.... */}) // 首先我们来定义一个 hasMany 关联 Project.hasMany(User, {as: 'Workers'}) 这会将 projectId 属性添加到 User。...note 要切断关系、哪些要新增关系,所以就需要查出来进行一个计算集合的 “交集” 运算。...`='2018-10-10 08:25:04' WHERE `id` IN (1, 2) 通过以上的 SQL 语句,我们知道调用 user.setNotes([]) 会删除当前用户下所关联的所有 note

    12.3K30

    Yii2.0 数据库操作增删改查大全

    column(): 返回查询结果中的第一列的值。 exists(): 返回一个值,该值指示查询结果是否有数据。 where(): 添加查询条件 with(): 该查询应执行的关系列表。...[[ActiveRecord::hasMany()]]:返回对应关系的多条记录 应用实例: //客户表Model:CustomerModel //订单表Model:OrdersModel //国家表Model...:CountrysModel //首先要建立表与表之间的关系 //在CustomerModel中添加与订单的关系 Class CustomerModel extends yiidbActiveRecord...{ ... public function getOrders() { //客户和订单是一对多的关系所以用hasMany //此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间...//id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段 return $this ->hasMany(OrdersModel::className

    1.9K20

    C# 数据操作系列 - 7. EF Core 导航属性配置

    在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。...这一篇将为大家细细分析一下,如何设置这些映射。 1. 实体之间的关系 从数据表来考虑,两个表之前的关系有一对一,一对多(多对一)和多对多的关系。...意思就是无法定义一对一关系中的子/从属方 如何解决呢?之前在说的时候,EF会根据导航属性自动生成一个外键,但是这一条在一对一这里就有点不太起作用了。...如果想在Single端设置,需要先用 HasMany表示要设置一个多对X的关系,然后调用WithOne 表示是多对一。如果是Many端,则必须先声明是HasOne。...多对多 在讲多对多的时候,需要先明白一个概念。多对多,对于导航两端来说,是无法在自己身上找到对应的标记的。也就是说,各自的数据表不会出现指向对方的外键。那么,如何实现多对多呢?

    3.3K20

    Laravel Eloquent 模型关联关系详解(上)

    到目前为止,我们介绍的所有 Eloquent 模型操作都是针对单表的,接下来我们将花三篇左右的篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间的各种关联关系,以及如何实现关联查询和更新。...要定义用户文章之间的一对多关联,可以在 User 模型类中通过 Eloquent 底层提供的 hasMany 方法来实现: public function posts() { return $this...->hasMany(Post::class); } 由于我们之间已经创建过 users 表和 posts 表,并且初始化过数据,所以我们可以直接通过动态属性的方式来调用用户模型上的文章: $user...和 hasOne 方法一样,hasMany 方法底层也对如何建立关联关系做了约定,而且 hasMany 方法和 hasOne 方法的签名一样: public function hasMany($related...建立相对的关联关系 与之前的关联关系一样,多对多关联也支持建立相对的关联关系,而且由于多对多的双方是平等的,不存在谁归属谁的问题,所以建立相对关联的方法都是一样的,我们可以在 Tag 模型中通过 belongsToMany

    10K40

    Ext JS 教程-ExtJS 4中的数据包(Package)

    现在让我们来看看如何创建一个模型: Ext.define('User', { extend: 'Ext.data.Model', fields: [ { name: 'id...hasMany关联被添加到模型中。...同样的,Post模型获得了一个comments()函数,因为我们有有许多(hasMany)Comment 关联的设置。...调用sync()通过它配置的代理保存了这个新的Post —— 这里再次是一个传入一个你想在操作完成时通知到的回调的同步操作。 belongsTo关联也会在模型中生成新的方法。...这是因为上面的例子假设当我们做一次获取所有用户的请求时服务器返回用户数据,附带返回它所有内嵌的Post和Comments。通过像我们上面那样设置关联,框架能够自动的在一个单独的请求中转出内嵌的数据。

    1.2K20
    领券