Laravel中的SQL连接,如何?

Posted

技术标签:

【中文标题】Laravel中的SQL连接,如何?【英文标题】:SQL join in Laravel, how to? 【发布时间】:2020-06-04 16:08:52 【问题描述】:

请帮助我,使用 JOINS,学习 SQL 和连接很痛苦 :(

我有 table: categories 列名:Name, ID

我有sub_categories,列名:ID

我有provider_services,列名:category_id & subcategory_id

当我在 laravel 查看刀片时$provider->providerServices()->where("status",1)->count()

我将收到:2

这意味着,该提供商有 2 个服务,其 category_id 为 2、3 和 subcategory_id 为 4,8

问题: 如何将此数据加入表类别并使用 cat_id 和 subcat_id 获取类别名称?

Category_id 2 是 - 绘画 Category_id 3 是 - 管道 SubCategory_id 是 - Aqua SubCategory_id 8 是 - 测试

因此,我需要一些东西:绘画和水族,管道和测试

非常感谢!

【问题讨论】:

【参考方案1】:

内连接子句

查询生成器也可用于编写连接语句。要执行基本的“内部连接”,您可以在查询构建器实例上使用 join 方法。传递给 join 方法的第一个参数是您需要连接的表的名称,而其余参数指定连接的列约束。您甚至可以在一个查询中加入多个表:

$users = DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'contacts.phone', 'orders.price')
            ->get();

来源:https://laravel.com/docs/5.8/queries#joins

上面的示例可以很容易地更改为适合您。 的连接函数如下:

->join('table', 'column1', '=', 'column2')

【讨论】:

【参考方案2】:

奇怪,为什么这个 SQL 查询返回的是 Categories & Sub-Categories 的整体状态,而不是 provider_services 的状态?

SELECT categories.name, categories.id, sub_categories.id as idPodKa, sub_categories.name as ImjaPodkategorij, provider_services.status as Status
FROM categories
LEFT JOIN sub_categories 
ON categories.id=sub_categories.category_id 
LEFT JOIN provider_services
ON categories.id=sub_categories.category_id=provider_services.status
where provider_services.status = 1

【讨论】:

以上是关于Laravel中的SQL连接,如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何将左连接横向 SQL 查询转换为 Laravel Eloquent 查询?

如何在laravel eloquent中为左连接表起别名

如何修复 laravel 5.5 中的查询生成器错误 sql 注入 *

如何使用 Laravel 查询构建器编写嵌套连接?

Laravel Controller SQL:连接两个表使输出相乘

Laravel 连接表