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


Laravel 5 Join table query with where clause

试图用Laravel 5.2的雄辩模型实现

我有2张桌子:

1( 项目

(ID、项目名称、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();

目标是打印到DoName和项目名称

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

最好的方法是在表之间创建一个关系,并预先加载关系。

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

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

现在,从您的控制器中,您只需调用:

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

这将为您提供具有相应项目的当前登录用户的待办事项。

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

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

注意:如果您遵循一些约定会很好。表格列应如下所示:

users表 -> 型号:User.php
列: idname ....

projects表 -> 型号:Project.php
列: idnameuser_id

todos表>模型:Todo.php
列: idnameproject_iduser_id .

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

试试这个,

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