【问题标题】:Laravel - my left join query is not working [closed]Laravel - 我的左连接查询不起作用[关闭]
【发布时间】:2017-06-15 18:46:29
【问题描述】:

我有这个问题

 $data=Post::join('category', 'questions.categoryid', '=', 'category.CategoryId')
         ->where('category.CategoryName','demo')
        ->join('comments', function ($join) {
                $join->on('posts.postId', '=', 'comments.postId')
                ->where('posts.postId', '!=', 'comments.linkId');
        }) ->get();

我有上面的查询,我正在根据类别名称检索所有帖子并使用 cmets 加入表。

一切正常,但以下行不起作用。我的意思是即使添加此行仍然检索所有记录,甚至我尝试将 !=<> 但它不起作用

->where('posts.postId', '!=', 'comments.linkId');

【问题讨论】:

  • 希望您知道这不是左连接。 Laravel 的连接是内连接。

标签: php mysql laravel laravel-5


【解决方案1】:

您不要在 JOIN 中使用 WHERE 子句,您可以扩展 ON 子句:

->join('comments', function ($join) {
      $join->on('posts.postId', '=', 'comments.postId')
           ->on('posts.postId', '!=', 'comments.linkId');
})

相当于:

JOIN comments ON posts.postId = comments.postId AND posts.postId != comments.linkId

【讨论】:

  • @devon.Thanks 我已经尝试过这个。如果我像这样添加,那么我只会得到一个包含 cmets.linkId 的记录
  • @devon.even 我改成左连接然后它会全部检索
  • 我不太确定你在这里追求什么,但这听起来不再像是 Laravel 的问题,也许你只是不明白左连接和内连接的作用?也许您想研究 Eloquent 关系?
  • @devon.ya leftjoin 将给出第一个表记录,即使我们在第二个表中没有找到。但内连接只匹配两个表中的记录