【问题标题】:Laravel SQL Query BuilderLaravel SQL 查询生成器
【发布时间】:2016-05-20 22:35:09
【问题描述】:

我有 4 个表、3 个数据和 2 个数据透视表:

projects
-----------
id  |  name 

tasks
------------
id  |  name  |  project_id

users
------------
id  |  name

project_user
------------
project_id  |  user_id

task_user
------------
task_id  |  user_id

现在我要获取的是所有项目的列表,这些项目要么直接分配给特定用户,要么任务分配给该用户。

我已经尝试了很多东西,但不知何故,它不会真正起作用,我也不知道 Laravel Query Builder 怎么能做到。

这是我的最后一个 SQL 查询:

$projects = \DB::select( \DB::raw("SELECT * FROM projects, project_user 
WHERE EXISTS (
    SELECT 1 FROM tasks, task_user 
    WHERE tasks.status = 0 
    AND tasks.id = task_user.task_id 
    AND task_user.user_id = '".$userId."' ) 
AND projects.status = 0 
AND projects.id = project_user.project_id 
AND project_user.user_id = '".$userId."'") );

我需要如何进行查询来实现它?

是否可以使用 Laravel 查询生成器来实现?

感谢您的每一个帮助!

【问题讨论】:

    标签: mysql sql laravel


    【解决方案1】:

    使用UNION ALL 获取两组数据,无需使用OR

    $projects = \DB::select( \DB::raw("
    SELECT p.id, p.name 
    FROM projects p
    INNER JOIN project_user pu ON p.user_id = pu.user_id
    UNION ALL
    SELECT p.id, p.name 
    FROM projects p
    INNER JOIN tasks t ON p.id = t.project_id
    INNER JOIN task_user tu ON t.id = tu.task_id
    ") );
    

    【讨论】:

    • 谢谢,但它不起作用,我现在有很多结果。但老实说,我的描述有误。当然,当我有数据透视表时,我在项目表上没有 user_id。我将您的 sql 更改为以下内容: $sqlQuery = "SELECT projects.id, projects.name FROM projects INNER JOIN project_user pu ON projects.id = pu.project_id UNION ALL SELECT projects.id, projects.name FROM projects INNER JOIN tasks t ON projects.id = t.project_id INNER JOIN task_user tu ON t.id = tu.task_id";有什么建议吗?
    猜你喜欢
    • 2021-08-07
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2019-10-14
    相关资源
    最近更新 更多