基于关联查询过滤模型实例 有结果过滤 有的时候,可能需要根据关联查询的结果来过滤查询结果,比如我们想要获取所有发布过文章的用户,可以这么做: $users = User::has('posts')->get...比如我们想要统计某篇文章的评论数,可以这么做: $post = Post::withCount('comments')->findOrFail(32); 我们查看下返回的 $post 模型实例的数据结构...(32); 对应的返回结果如下: 这个功能用于不考虑性能的场景进行快速查询还是很方便的,但如果对性能有较高要求,则不推荐使用,毕竟是要执行多次查询才能逐个统计出来。...=> ['user_id' => 2], 3 => ['user_id' => 3], ]); 此外,Eloquent 底层还提供了为已有模型之间进行多对多关联的绑定和解除操作。...; 关联模型的更新、插入和删除操作。
查询 基本查询操作 方法all用于返回模型表中所有的结果 $flights = Flight::all(); foreach ($flights as $flight) { echo $flight...) ->take(10) ->get(); 可以看到,查询构造器的方法对模型类也是可以使用的 在eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate...= App\Flight::find([1, 2, 3]); 如果查询不到结果的话,可以使用findOrFail或者firstOrFail方法,这两个方法在查询不到结果的时候会抛出Illuminate...Route::get('/api/flights/{id}', function ($id) { return App\Flight::findOrFail($id); }); 查询聚集函数结果...->get(); // 关联操作中也可以使用 $flight->history()->withTrashed()->get(); 只查询软删除的模型 $flights = App\Flight::onlyTrashed
因为设计的原因,laravel支持的链式操作 本质上方法的返回值归属于不同的类。所以在使用方法之前务必明确调用的是哪个类的那个方法,返回的是什么类型的数据。...所以我们推荐使用where语句进行数据库SQL操作,将合适的结果集返回,这样精简了数据库负载, 再者,使用集合的操作方法,对结果集进行进一步的格式化,效率会高的多。...($contactId)); } 其中,first(), firstOrFail(), find(), findOrFail(),都是用于返回单个条目,单条记录的方法。...如果返回的是多个条目,就不能用这些方法了: $vipContacts = Contact::where('vip', true)->get(); 有一个标准的方法 get,就是返回一个 eloquent...如果数据量有点大,要分批次将结果返回, 但是又不知道总量多少,则可以使用分块返回的方式,手动指定每次查询的条目数, 依次将结果集拿出来: Contact::chunk(100, function ($contacts
,访问该方法后将会得到 null,当查询为空时则为null: 1.1.2 find 的 findOrEmpty、findOrFail 操作 若想在查询结果为 null 时返回空数据,那么可以使用...: 若想在查询为空时返回异常,那么直接使用 findOrFail 查询即可: public function select(){ $res=Db::table('student')->where...('id', 6)->findOrFail(); dump($res); } 此时访问后结果如下: 1.2 table 方法 的多条数据查询 在 1.1 中的示例均是单条数据查询,在这里咱们开始介绍多少数据的查询方式...1.2.2 select 的 selectOrFail、toArray 操作 find 有 finOrFail 操作,那么同样的 select 也有此操作,当查询数据集时若返回为空想要抛出异常,那么就使用...')->where('id', 5)->value('name'); dump($res); } 其中 value 表示指定返回值的内容,那么此时查询到数据后,返回结果如下: 若数据为空则返回
只不过,为了与模型文件对应起来,可以直接在路由处理方法的闭包内调用模型方法,并组装数据返回。...比如传入id数值,返回查询后的结果: Route::get('conferences/{id}', function ($id) { $conference = Conference::findOrFail...($id); }); 其中 findOrFail 方法是一个内置的语法糖,用于根据id查询条目,找不到的抛出404错误页面。...就是路由内默认使用某个变量传入参数,这个键名与执行方法变量名相同,那么系统就会根据传入的参数,在执行方法内使用依赖注入方式实例化一个模型,而实例化的方法,恰恰就是传入的参数的查询结果集。...于是,把 {conference} 的值,作为查询条件,使用执行方法内的模型 Conference 实例化并执行查询结果,并赋值给 $conference 变量。
引言 前两期为了说明laravel框架提供的数据库操作能力,直接使用DB门面操作, 而没有引入更为强大的eloquent orm功能。...这是一个位于数据库操作之上的一个中间层, 不仅仅是对于整张表的操作,更能细化到每行记录的增删改查。...接着是使用模型对数据的查询: public function show($contactId) { return Contact::findOrFail($contactId); } 这里有一个语法糖...,就是 findOrFail,如果找到就返回一个模型,找不到就返回默认错误页面。...如果返回的模型想要手动定制一下,那么在查询结果集中,使用Collection提供的格式化功能就好了。
对于v4.2.0版本不是自动开启transaction的,另外node的结构化操作需要在模型上手动执行save,但是有些方法会隐性执行save并返回操作后的布尔类型的结果。...->down(3); 操作返回根据操作的节点的位置是否改变的布尔值 约束 很多约束条件可以被用到这些查询构造器上: whereIsRoot() 仅获取根节点; whereIsAfter($id) 获取特定...(); //结果集合中包含目标node自身 $result = Category::whereDescendantOrSelf($node)->get(); 构建树 在获取了node的结果集合后,我们就可以将它转化为树...$nodes = Category::get()->toFlatTree(); 之前的例子将向下面这样输出: Root Child 1 Sub child 1 Child 2 Another root...例如: $node = MenuItem::findOrFail($id); $node->siblings()->withDepth()->get(); // OK 使用实例来获取删选的查询: $node
(原始查找) DB facade实现CURD(原生SQL语句操作数据库 ) 3.1.1 插入数据 (返回bool 插入是否成功) $result = DB::insert('insert into student..., ['abcd',23]); 3.1.2 查询数据 (返回array 所有查询结果) $result = DB::select('select * from student where id 结果 DB::table("表名")->get(); DB::table("表名")->where(条件)->get(); pluck - 查询指定字段数据 DB::table...); select - 指定要查询的字段 DB::table("表名")->select("id","name")->get(); 结果分块:如果你需要操作数千条数据库记录,可以考虑使用...$result = Student::find(1001); findOrFail: 通过主键返回指定的数据 未查找到到则抛出异常 $result = Student::findOrFail(1001
实例 1 -- findOrFail(): 要替代以下代码的实现: $user = User::find($id); if (!...$user) { abort (404); } 你可以这样写: $user = User::findOrFail($id); 实例 2 -- firstOrCreate(): 要替代以下代码的实现: $...发现是没有效果的: $clients = Client::orderBy('full_name')->get(); //没有效果 解决办法很简单.我们需要在获取结果后对结果进行排序....18. update() 的结果是什么? 你是否想知道这段代码实际上返回什么?...$result = $products->whereNull('category_id')->update(['category_id' => 2]); 我是说,更新操作是在数据库中执行的,但 $result
渴求式加载 前面我们演示的关联关系查询都是通过动态属性的方式,这种加载方式叫做「懒惰式加载」,因为都是用到的时候才回去查询,这就意味着要多次对数据库的进行查询才能返回需要的结果。...如果是单条记录获取关联关系,就需要两次查询;如果是多条记录获取关联关系,比如文章列表页获取作者信息,因为每篇文章的作者通过动态属性获取都有一次查询,所以对N条记录来说,需要「N+1」次查询才能返回需要的结果...能不能一次就返回所有的关联查询结果呢?...1); $tags = $post->tags; 返回结果和上面一样,但减少了对数据库的查询次数。...: 获取中间表字段 Eloquent 还提供了方法允许你获取中间表的字段,你仔细看查询结果字段,会发现 relations 字段中有一个 pivot 属性,中间表字段就存放在这个属性对象上: 我们在遍历返回结果的时候可以在循环中通过
', '>', 0)->select('id', 'title', 'content')->get(); 对应查询结果如下: ?...(10)->limit(5)->get(); 对应的返回结果如下: ?...模型类查询结果为空会返回 null。...如果你想要在单条记录返回结果为空时返回 404 响应(在控制器方法中可能需要用到类似操作),可以通过 firstOrFail 或者 findOrFail 方法在找不到对应记录时抛出 404 异常,从而简化代码编写...: $user = User::findOrFail(111); 如果 id=111 的记录在 users 数据表中不存在,就会返回 404 响应: ?
findOrFail() : $user = User::findOrFail($id); 等价于: $user = User::find($id); if (!...(1)->get(); 8....author() { return $this->belongsTo('App\Author')->withDefault(); } 在此示例中,如果没有作者附加到帖子,则 author()关系将返回空的...18. update() 方法的执行结果 你有没有想过这段代码究竟返回了什么?...因此,如果您需要检查受影响的行数,则无需再调用任何其他内容 - update()方法将为您返回此数字。 19.
例 1 findOrFail(): 可以把这样的代码: $user = User::find($id); if (!...$user) { abort (404); } 换成这样: $user = User::findOrFail($id); 例 2 firstOrCreate(): 不需要写这么长: $user = User...$user = User::find(1); 我很惊讶很少有人知道它可以接受多个ID作为数组: $users = User::find([1,2,3]); 7....(1)->get(); 是的,你也可以改成任何字段的名称,并将其作为后缀附加到“where”,它将神奇的产生预想的效果(通过魔术方法实现调用)。...) { return $this->belongsTo('App\Author')->withDefault(); } 在这个例子中,在这个帖子下没有关联作者的时候,author()关联关系将返回一个空的
joshua317博客 https://www.joshua317.com/article/293 Model::find('id');//查找主键为id的所有数据 Model::find([$key1,$key2]...);//使用双主键进行查找 Model::findOrFail($id);//查找主键为$id的数据,找不到抛出异常 Model::where('id',$id)->value();//获取id为$id...selectRaw('id , name as 姓名')->first();//查询id,name 作为姓名字段展示,selectRaw()里面可以使用原生sql语句 Model::whereIn('id',[1,2,3...])->get();//whereIn查询 where id in (1,2,3) whereRaw("id in (1,2,3)") whereBetween('id',[1,3]) Model...'convert(字段名 using gbk)')//根据中文排序 Model::paginate(10);//分页 Model::withTrashed();//软删除查询 ->toArray() 结果对象转换数组
事务其实就是打包一组操作(或者命令)作为一个整体,在事务处理时将顺序执行这些操作,并返回结果,如果其中任何一个环节出错,所有的操作将被回滚。...operations.multi();//开启事务时不需要参数 } }); 2.命令入列: redisTemplate.execute(new SessionCallback返回值是 List 列表,存放了每个事务执行结果的标记。...事务开启后执行的每个操作,如果成功则放入 true 值作为标记,操作失败则不放入结果标记。 有几个操作就有几个结果标记。因为本演示案例,Redis 只有一个设置库存的操作,所以只有一个标记。...因为事务是要么每个操作都成功,要么都失败,所以一般来说可以简单处理,不用判断 operations.exec() 方法返回值列表中的每个元素是否都为 true,只要判断返回值列表长度大于 0 则表示执行成功
App\Models\Task::findOrFail($id); }); Laravel 提供了一个「路由模型绑定」功能来简化上述代码编写,通过路由模型绑定,我们只需要定义一个特殊约定的参数名(比如...{task})来告知路由解析器需要从 Eloquent 记录中根据给定的资源 ID 去查询模型实例,并将查询结果作为参数传入而不是资源 ID。...由于在正式开发中,出于性能的考虑通常会对模型数据进行缓存,此外在很多情况下,需要关联查询才能得到我们需要的结果,所以并不建议过多使用这种路由模型绑定。...2、兜底路由 在 Laravel 5.6 中,引入了兜底路由功能。...所谓兜底路由,就是当路由文件中定义的所有路由都无法匹配用户请求的 URL 时,用来处理用户请求的路由,在此之前,Laravel 都会通过异常处理器为这种请求返回 404 响应,使用兜底路由的好处是我们可以对这类请求进行统计并进行一些自定义的操作
在上一篇教程中,我们基于 Eloquent 模型实现了对数据表记录的增删改查操作,今天我们在此基础上介绍两个 Eloquent 模型提供的高级功能 —— 批量赋值和软删除。...更新模型 如果是更新模型类,也可以通过批量赋值的方式实现,只需在获取模型类后使用 fill 方法批量填充属性即可: $post = Post::findOrFail(11); $post->fill($...这样我们在模型类上做所有常规查询操作的时候就会过滤掉被软删除的记录(这些常规查询在上一篇教程中已经给出)。...如果想要在查询结果中出现软删除记录,可以通过在查询的时候调用 withTrashed 方法实现: $post = Post::withTrashed()->find(32); 返回结果和正常查询结果一样...在某些场景下,你可能只需要获取被软删除的记录,这可以通过 onlyTrashed 方法来实现: $post = Post::onlyTrashed()->where('views', 0)->get()
/api/v2/restapi/operations/general/get_status_responses.go这个文件的作用是定义了获取状态(GetStatus)操作的响应结构体。.../api/v2/restapi/operations/silence/get_silence_parameters.go文件的作用是定义了获取沉默(silence)参数的操作。...api/v2/restapi/operations/receiver/get_receivers.go这个文件的作用是定义了获取接收者(receivers)的相关操作。...综上所述,alertmanager/api/v2/restapi/operations/receiver/get_receivers.go这个文件的作用是定义了获取接收者的相关操作,包括处理接收者的HTTP...它定义了每个API路径的操作,如GET、POST、DELETE等,并与对应的处理函数进行绑定。这样可以通过API接口来进行告警规则的管理和查询等操作。
PUT动词的另一个要求是幂等,在这种情况下,基本上意味着您可以发送该请求1,2或1000次,结果将相同:数据库中的一个更新的资源。...在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。...例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。...有些端点是非常明确,而且,作为一个结果,你的API将更加易于使用和维护,而不是这样的端点例如GET /get_article?id_article=12和POST /delete_article?...403:禁止 用户已通过身份验证,但没有执行操作的权限。 404: 未找到。当没有找到资源时,这将由Laravel自动返回。 500: 内部服务器错误。