Laravel学习-添加分类和获取列表-with

zz/2024/5/21 21:30:12

一. 添加分类, 在模型中 建立模型之间的关联

// 在模型文件中添加, 建立模型之间的关联public function children()
{// Category 关联的表名; pid 外键, id 内键return $this->hasMany(Category::class, 'pid', 'id');
}

二. 在控制器中使用

        只获取id, pid, name, leave等字段

// 获取分类列表
// children.children 会自己根据建立的模型去 自己嵌套找子级/*** 所有分类原始数据*/
if (!function_exists('categoryTree')) {function categoryTree($status = false){$categories = Categories::select(['id','pid','name','level', 'status'])->when($status !== false, function ($query) use ($status) {$query->where('status', $status);})->where('pid', 0)->with(['children' => function($query) use ($status) {$query->select(['id','pid','name','level','status'])->where('status', $status);},'children.children' => function($query) use ($status) {$query->where('status', $status);}])->get()->toArray();return $categories;}
}

缓存数据

/*** 缓存没被禁用的分类*/
if (!function_exists('cache_category')) {function cache_category(){return cache()->rememberForever('cache_category', function () {return categoryTree(1);});}
}

清除缓存

/*** 清空分类缓存*/
if (!function_exists('forget_cache_category')) {function forget_cache_category(){cache()->forget('cache_category');}
}

这里只是演示上面文章模型的关联

    // 这个仅为示例添加/*** 用户模型一对多关联用户动态表* 一个用户拥有多条的动态数据* 参数1:要关联的模型(从表)* 参数2:存在于从表中的那个与userinfor(主表)关联的字段* 参数3:存在于主表中的那个与 从表进行关联的字段名*/public function article_hasMany(){return $this->hasMany(Article::class,'user_id','id');}------上面应写在模型内, 下面在控制器调用时用--------//获取当前登录用户动态列表public function getMyDynamicList(Request $request){//接收必要参数$page = $request['page'] ?? 1;//分页$limit = 2;//每页数据条数$offset = $page * $limit - $limit;//从第几条开始读取 默认为第0条//查询当前用户动态数据(倒序排列)$user_id = UserInfor::where('id',1);//获取当前登录的用户模型//查询当前用户下的文章,并进行分页,每页2条数据,按文章的创建时间进行倒序排列。$data_list = $user_id->with(['article_hasMany'=>function($query) use($offset,$limit){//注意:在这个闭包里面的调用的字段均为被关联的model中的字段(也就是存在于从表中的字段,无需考虑从表字段名与主表字段名重复的问题。)//如下面的示例:$query->orderBy('从表中的created_at','desc')->offset($offset)->limit($limit);$query->orderBy('created_at','desc')->offset($offset)->limit($limit);}])->first();dd($data_list->toArray());//laravel框架自带的打印函数,效果等同于下方2行代码。//var_dump($data_list->toArray());//die;}

备注

如果是需要使用附表的过滤做列表筛选,使用with就不是很好了!

使用with的的意思,在确定主信息的时候,罗列符合条件的附表信息,适合单条或者少量主表信息或者主表信息筛选


http://www.ngui.cc/zz/2732122.html

相关文章

Laravel学习-创建辅助函数helpers

helpers - 自定义辅助函数; 在项目根目录下创建 helpers.php 1. 创建helpers文件后,要在composer.json文件 大概39行的 autoload字段中添加 "autoload" : {"files": ["helpers.php"] } 2. 然后刷新composer自动加载, 执行下面命令 composer …

Laravel学习-发送邮箱

路由控制器 发送邮件验证码路由 更新邮箱的路由 1.配置邮箱 .env MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com //这个是你用的哪里的邮箱,就用他们的地址 MAIL_PORT465 MAIL_USERNAME12621qq.com //邮箱的账号 MAIL_PASSWORDANNSDEDJJDJ //授权码 MAIL_ENCRYPTIONssl…

php学习-常量

学习来源: 黑马程序员PHP零基础入门到精通教程(P1基础6天)_哔哩哔哩_bilibili 一. 定义常量的两种方式 (5.3之后才有两种) 1. 使用定义常量的函数: define(常量名, 常量值); 2. 5.3之后才有的: const 常量名 123 二. 命名规则 1. 常量不需要使用 $…

1.1 CPU占用率

下面是一些了解当前线程/进程/系统效能的API,所有描述来自MSDN文档,具体如下: 注意每个函数对应的头文件和相应的lib. DWORD GetTickCount(void);/*Header: Winbase.h, include Windows.hLink Library: Kernel32.libDLL: Dernel32.dllDetail…

VC 2005 coding shortcuts

coding 了这么多年,有些快捷键没用了老忘,有空把它整出来(备忘) 一些还不怎么熟悉使用的快捷键://debug: AltF10 :Apply codes changes CtrlF10 :Run to cursor ShiftF11 :跳出当前函数CtrlShiftF10 &a…

[转]Cygwin使用

最近需要用到bash,perl等脚本,找到cygwin来学学... 很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活&a…

ExtJs之grid使用详解(转帖)

Ext2.0是一个javascript框架,它的Grid控件和其它可以显示数据的控件,能够支持多种数据类型,如二维数组、Json数据和XML数据,甚至包括我们自定义的数据类型。Ext为我们提供了一个桥梁Ext.data.Store,通过它我们可以把任…

Oracle存储过程总结 (内容转载)

1、创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test;-- E.g: 打印出输入的时间信息create or replace procedure test(workDate in Date) is begin dbms_output.…

Java的抽象类和接口示例

最近在学习java,在抽象类和接口上有这样一个示例。 代码如下: 下面展示一些 内联代码片。 package TaskFive; //打印机抽象类 //抽象类中的抽象方法,方法的具体实现由子类确定 abstract class Printer {abstract void pri(String s);//打印a…

Servlet补充学习——《JSP Web开发应用》

Servlet是java服务器端的小程序,是Java环境下实现动态网页的基本技术。Servlet程序能够调用Javabean、JDBC、其他servlet、RML等程序完成指定的功能。在应用中servlet起到了中间层的作用,将客户端和后台的资源隔离开来。 servlet有支持servlet的服务器&a…