Php Laravel 4 leftJoin mySQL语句未正确返回
我对我在Laravel的查询生成器方面缺乏经验感到有点沮丧。我有一个mySQL语句,它可以很好地比较两个几乎相同的表中是否有丢失的行。然而,Laravel版本不适合我 基本上我有两个表test_1和test_2,每个表都有列:id、name和color。我正在尝试列出任何缺少的行。以下是表格结构: 表:测试1 表:测试2 这是mySQL(工作正常),它返回:“4 | birgit | yellow”Php Laravel 4 leftJoin mySQL语句未正确返回,php,mysql,laravel-4,Php,Mysql,Laravel 4,我对我在Laravel的查询生成器方面缺乏经验感到有点沮丧。我有一个mySQL语句,它可以很好地比较两个几乎相同的表中是否有丢失的行。然而,Laravel版本不适合我 基本上我有两个表test_1和test_2,每个表都有列:id、name和color。我正在尝试列出任何缺少的行。以下是表格结构: 表:测试1 表:测试2 这是mySQL(工作正常),它返回:“4 | birgit | yellow” SELECT a.* FROM test_1 a LEFT JOIN test_2 b ON
SELECT a.*
FROM test_1 a
LEFT JOIN test_2 b ON b.name = a.name
WHERE b.id is NULL
以下是我认为应该与Laravel等价的内容(不起作用-它返回一个对象,其中三个属性的值都为null):
我的下一步是比较两个表中名称相同但颜色不同的位置,这也不起作用。一如既往,我们非常感谢您的任何帮助。谢谢
$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'));
您会得到空值,因为这些值是表2中不匹配的值。您需要手动别名并从表_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();
如此接近,却又如此遥远!谢谢你的轻推。它工作得很好。。。非常感谢!
$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();