laravel的联表查询

一、联表查询

联表要求至少得有2张表(除了自己【表】连接自己【表】,自联查询),并且还是存在关系的两张表。
例如:可以建立2张表:文章表、作者表。

文章表(article):

id主键
Article_name文章名称,varchar(50),not null
Author_id作者id,int,not null

作者表(author):

id主键
Author_name作者名称 ,varchar(20),not null

1.1 创建迁移文件

php artisan make:migration create_article_table
php artisan make:migration create_author_table
在这里插入图片描述
article加上字段:

$table->increments('id');
$table->string('article_name', 50)->comment('文章标题');
$table->integer('author_id') -> comment('作者id');
$table->timestamps();

在这里插入图片描述


author加上字段:

$table->increments('id');
$table->string('author_name', 20) -> comment('作者名称');
$table->timestamps();

在这里插入图片描述


1.2 执行迁移文件

然后执行迁移文件:
php artisan migrate
在这里插入图片描述
在这里插入图片描述

1.3 模拟数据(通过填充器)

1、创建填充器文件(可以将多个数据表的写入操作写在一起)
php artisan make:seeder ArticleAndAuthorTableSeeder
在这里插入图片描述
2、编写数据模拟的代码
在这里插入图片描述
3、执行填充器
php artisan db:seed --class=ArticleAndAuthorTableSeeder
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 联表查询例子

要求查询数据表(文章表、作者表),查询出文章的信息包含了作者名称,联表查询一共有:内联表(inner)、左联表(left)、右联表(right)。

原始sql语句:【左外联表】
select article.id,article.article_name, author.author_name from article left join author on article.author_id = author.id
在这里插入图片描述

将上述的sql语句改成链式操作:

语法:DB 门面/模型 -> join 联表方式名称(关联的表名,表1的字段,运算符,表2的字段)

左连接:如果你是想要执行左链接而不是内链接可以使用leftJoin方法,该方法和join方法的用法
创建路由:
在这里插入图片描述
创建方法:
在这里插入图片描述
效果:
在这里插入图片描述

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
您可以使用 Laravel 的 Eloquent ORM 和递归方法来实现多级父子表查询整合成树的功能。 首先,您需要定义您的模型,并且在模型中定义表的关系。假设您的表名为 `categories`,那么您的模型代码可能如下所示: ```php class Category extends Model { public function parent() { return $this->belongsTo(Category::class, 'parent_id'); } public function children() { return $this->hasMany(Category::class, 'parent_id'); } } ``` 在上面的代码中,我们定义了 `parent()` 方法和 `children()` 方法来表示当前分类的父分类和子分类,这里使用了 Laravel 的 Eloquent ORM 中的关系映射方法。 接下来,您可以编写一个递归方法来将您的分类表数据整合成树形结构。代码如下: ```php function buildTree($categories, $parentId = null) { $branch = []; foreach ($categories as $category) { if ($category->parent_id == $parentId) { $children = buildTree($categories, $category->id); if ($children) { $category->children = $children; } $branch[] = $category; } } return $branch; } ``` 在上面的代码中,我们使用了递归的方式,从顶级分类开始,递归地查询当前分类的子分类,并将它们整合成树形结构。 最后,您可以在控制器中调用这个方法,并将查询到的分类数据传递给它,代码如下: ```php use App\Models\Category; class CategoryController extends Controller { public function index() { $categories = Category::all(); $tree = buildTree($categories); return view('categories.index', ['categories' => $tree]); } } ``` 在上面的代码中,我们首先查询了所有的分类数据,然后调用 `buildTree()` 方法将分类数据整合成树形结构,并将整合后的数据传递给视图渲染。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值