首页 > 解决方案 > 如何在 Laravel 中的两个表的 where 中验证两列的相等性

问题描述

我有两个具有以下结构的表

Table 1                                  Table2

table_id|table_name               table_id2| table_name2
  1     | sale                         2   | sale  
  2     | sale                         1   | note
  1     | note 
  3     | sale
  2     | note

我想从 table_id 和 table_name 不在 table2 (id, table) 中的第一个表中获取所有记录

预期结果

 1 | sale   
 3 | sale   
 2 | note   

像这样的事情发生在我身上,但我没有得到预期的结果

$table1->where(function ($query)  {
        $query->whereNotIn('table_id',$table2->pluck('table_id2'));
   });

标签: phpmysqllaravel

解决方案


假设你的桌子是这样的;

CREATE TABLE `first`
(
    `table_id`   int(11),
    `table_name` varchar(64)
);

CREATE TABLE `second`
(
    `table_id2`   int(11),
    `table_name2` varchar(64)
);

查询将是;

select first.*
from first
         left join second on table_id2 = table_id and table_name2 = table_name
where table_name2 is null;

查询生成器将是;

return DB::table('first')
        ->leftJoin('second', function ($join) {
            $join->on('table_id2', '=', 'table_id');
            $join->on('table_name2', '=', 'table_name');
        })
        ->whereNull('table_name2')
        ->get([
            'first.*'
        ]);

响应 json 将是;

[
  {
    "table_id": 1,
    "table_name": "sale"
  },
  {
    "table_id": 3,
    "table_name": "sale"
  },
  {
    "table_id": 2,
    "table_name": "note"
  }
]

推荐阅读