gpt4 book ai didi

php - Laravel 4 leftJoin mySQL 语句未正确返回

转载 作者:行者123 更新时间:2023-11-30 00:43:42 24 4
gpt4 key购买 nike

我对 Laravel 的查询构建器缺乏经验感到有点沮丧。我有一个 mySQL 语句,可以很好地比较两个几乎相同的表以查找任何丢失的行。然而 Laravel 版本不适合我。

基本上我有两个表 test_1 和 test_2,每个表都有列:id、name 和 color。我正在尝试列出所有缺失的行。这是表结构:

表:test_1

test_1

表:test_2

test_2

这是 mySQL(运行良好),它返回:'4 |比 git |黄色'

SELECT a.*
FROM test_1 a
LEFT JOIN test_2 b ON b.name = a.name
WHERE b.id is NULL

我认为这应该是 Laravel 的等价物(不起作用 - 它返回一个对象,三个属性中的每一个属性都为空值):

$test = DB::table('test_1')
->leftJoin('test_2', 'test_2.name', '=', 'test_1.name')
->where('test_2.id', null)
->get();

我的下一步是比较两个表之间名称相同但颜色不同的地方,但这也不起作用。一如既往,我们非常感谢您提供的任何帮助。谢谢!

$test = DB::table('test_1')
->leftJoin('test_2', 'test_2.name', '=', 'test_1.name')
->where('test_2.color', '!=', 'test_1.color')
->get();

更新:使用 DB::raw 方法(如下)按预期工作。

$test2 = DB::select( DB::raw('SELECT a.* FROM test_1 a LEFT JOIN test_2 b ON b.name = a.name WHERE a.color != b.color'));
$test3 = DB::select( DB::raw('SELECT a.* FROM test_1 a LEFT JOIN test_2 b ON b.name = a.name WHERE b.id is NULL'));

最佳答案

您会得到 NULL 值,因为这些值是 table_2 中没有匹配项时的值。您需要手动设置别名并从 table_1 中选择列。

$results = DB::table('table_1')
->leftJoin('table_2', 'table_2.id', '=', 'table_1.id')
->where('table_2.id')
->select('table_1.id AS id', 'table_1.name AS name', 'table_2.color AS color')
->get();

关于php - Laravel 4 leftJoin mySQL 语句未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com