Laravel Lumen 雄辩的左连接返回连接表数据而不是主数据

Posted

技术标签:

【中文标题】Laravel Lumen 雄辩的左连接返回连接表数据而不是主数据【英文标题】:Laravel Lumen eloquent left join returns joined table data rather than primary able data 【发布时间】:2021-09-29 19:33:53 【问题描述】:

我有两张表 company 和 courses 表 该表有以下字段

 companies table
  id, full_name, email, deleted_at

和课程表

 courses table
  id, company_id, course_name,deleted_at

现在我想检索所有未删除公司的课程。所以在我的控制器中我添加了

public function index(Request $request)

  $query = Courses::query();
  $query = $query->leftJoin('companies','companies.id','=','courses.company_id');
  $query->whereNull('companies.deleted_at');
  if($request->get('filter_name'))
    $query = $query->where('courses.name', 'like', '%' . $request->get('filter_name') . '%');
  
 
  return  response()->json($query->paginate($request->get("perPage")));  

    

当我运行上述程序时,它会返回公司数据而不是课程。我哪里出错了或者我错过了什么?

【问题讨论】:

它仍然给我这个问题。我正在为此使用 laravel lumen。 $query = Courses::query(); $query->leftJoin('companies','companies.id','=','courses.company_id'); $query->whereNull('companies.deleted_at'); if($request->get('filter_name')) $query->where('courses.name', 'like', '%' . $request->get('filter_name') . '%'); 这是你尝试过的查询吗?在之前的评论中我有其他查询所以 是的,它仍然是同样的问题。 你想要这个'Now i would like to retrieve all courses which company is not deleted'。将查询$query->whereNull('companies.deleted_at');重写为$query->whereNotNull('companies.deleted_at'); 【参考方案1】:

如果您在两个模型中都使用了预加载,则可以使用这种方法。

$all_course = Courses::with(['company', function($query) 
                            return $query->whereNotNull('deleted_at');
                       ])->get();

如您所见,我在 Courses 模型中查询以返回所有课程,但我在 company 关系中添加了一些过滤器。我在哪里使用whereNotNull 仅获取未删除的公司。

【讨论】:

以上是关于Laravel Lumen 雄辩的左连接返回连接表数据而不是主数据的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.1 雄辩的选择与前缀连接表

如果 id 不为 null 则返回,laravel 雄辩

多重连接 laravel 雄辩

在laravel中雄辩的where子句中连接两列

Laravel 5 雄辩的基于连接的字段最大值

将对象返回为 json 时访问雄辩的关系