Laravel 5使用where子句连接表查询

时间:2016-02-17 03:21:44

标签: php forms laravel

尝试使用Laravel 5.2的雄辩模型实现

我有两张桌子:

1)项目(id,projectName,users_id)

2)todo(id,todoName,ProjectID [id],users_id)

我想加入这些表并使用

预告表格内容
->where('users_id','=',Auth()->User()->id)

部分代码

$todos = DB::table('to_dos')->join('projects','to_dos.projectID','=','projects.projectName')
                                                            ->where('users_id','=',Auth()->User()->id)
                                                            ->get();

目标是打印toDoName和projectName

@foreach($todos as $todo)
    {{$todo -> ToDoName}}
    {{$todo -> projectName}}
    <br>
@endforeach

2 个答案:

答案 0 :(得分:3)

最好的方法是在表之间创建关系并急切加载关系。

Todo模型中,添加以下方法:

public function project()
{
  return $this->belongsTo('App\Project');
}

现在,您可以通过控制器致电:

$todos = Todo::with('project')->where('user_id', Auth::id());

这将为您提供当前登录用户的Todos以及相应的项目。

现在在您看来,您可以使用:

@foreach($todos as $todo)
   {{ $todo->name }}
   {{ $todo->project->name }}
@endforeach

注意:如果您遵循一些惯例,那将是一件好事。表格列如下:

users表格 - &gt;型号:User.php
列:idname ....

projects表格 - &gt;型号:Project.php
列:idnameuser_id

todos table-&gt;型号:Todo.php
列:idnameproject_iduser_id

请记住,当您遵循约定而不是配置时,事情就会容易得多。

答案 1 :(得分:0)

试试这个,

$todos = DB::table('to_dos as T')
->leftjoin('projects as P','T.projectID','=','P.projectName')
->Where('T.users_id',Auth()->User()->id)
->get();