【问题标题】:Laravel join query using Laravel eloquent使用 Laravel eloquent 的 Laravel 连接查询
【发布时间】:2015-08-19 21:58:28
【问题描述】:

我有两个表“用户”和“项目”

表用户

-----------------------------------
user_id | name | email | password |
-----------------------------------
   1    |name1 |email1 | password1|
-----------------------------------
   2    |name2 |email2 | password2|

表格项目

 project_id  |user_id | name          | 
 --------------------------------------
    1        |   1    | project_name1 |
 -----------------------------------
    2        |   1    | project_name2 |

这两个表之间没有关系,但项目中的 user_id 是用户表中的 id。

普通查询

SELECT a.user_id,a.name AS username,b.name AS project_name FROM users a LEFT JOIN projects b ON a.user_id=b.user_id;

我想在 laravel eloquent 中执行相同的查询。

在谷歌上搜索了一些关于“with”功能的想法,但无法获得输出。

谢谢。

【问题讨论】:

  • 不清楚您的问题是什么。请说明您期望的结果。
  • 你在用DB::raw吗?
  • @1010 我需要加入我提到的正常查询的两个表。我必须在 laravel eloquent 中完成相同的输出。例如:使用 User::all() 之类的语句。
  • 如果您希望它具有 eloquent 的功能,您应该在相关表中定义主键和外键。

标签: php mysql laravel-5


【解决方案1】:

我想,这个可以帮到你

    DB::table('users')
            ->leftJoin('projects', 'users.user_id', '=', 'projects.user_id')
            ->select('users.user_id', 'users.name as username', 'projects.name as project_name')
            ->get();

【讨论】:

    【解决方案2】:

    这是你应该使用 Eloquent 的方式: 创建用户.php

    <?php
    
    class User extends Eloquent
    {
        public function projects()
        {
            return $this->hasMany('Project');
        }
    
    }
    

    创建 Project.php

    <?php
    
    class Project extends Eloquent
    {
    }
    

    在控制器上,编写此代码以获取所有用户,并在每个用户中插入相关项目:

    $users = User::with('projects')->all();
    foreach($users as $user)
    {
        $project_of_this_user = $user->projects;
    }
    

    【讨论】:

    • 谢谢,这将有助于建立关系,但如果我在用户和项目之间没有关系,我怎么能把条件放在哪里。
    • $users = User::with('projects')-&gt;where('email', '=', 'example@example.com')-&gt;get();$users = User::where('email', '=', 'example@example.com')-&gt;get();
    【解决方案3】:

    你可以简单地做如下,

    DB::table('users')
            ->join('projects =', 'users.id', '=', 'posts.user_id')
            ->select('*')
            ->get();
    

    更多详情可以参考laravel Docs

    【讨论】:

      【解决方案4】:

      这应该是你需要的:

      DB::table('users')
        ->join('projects', 'projects.user_id', '=', 'users.user_id')
        ->select('users.user_id', 'users.name as username', 'projects.name as project_name')
        ->get();
      

      【讨论】:

      • 我已经尝试过这些并且正在工作。我需要使用 laravel 模型来做到这一点。我为“用户”创建了用户模型类,为“项目”创建了项目类
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2018-11-06
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2017-10-22
      相关资源
      最近更新 更多