Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-跨两个表使用where连接_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel-跨两个表使用where连接

Php Laravel-跨两个表使用where连接,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有表“jobs”,按job\u id索引,还有外键为“job\u id”的表讨论 在工作中,我有一个叫做“总结”的专栏,在讨论中,我有一个叫做“正文”的专栏。我希望在这两个表的这两列中搜索相同的文本字符串,并返回适用的作业 例如,如果作业id=7的作业记录在其“摘要”列中有字符串“somestring”,而讨论记录有外键作业id=20和字符串“somestring”,我希望返回作业id=7和作业id=20的作业记录 我用的是拉威尔。我很难找到解决方案,这是我得到的最接近的解决方案: $quer

我有表“jobs”,按job\u id索引,还有外键为“job\u id”的表讨论

在工作中,我有一个叫做“总结”的专栏,在讨论中,我有一个叫做“正文”的专栏。我希望在这两个表的这两列中搜索相同的文本字符串,并返回适用的作业

例如,如果作业id=7的作业记录在其“摘要”列中有字符串“somestring”,而讨论记录有外键作业id=20和字符串“somestring”,我希望返回作业id=7和作业id=20的作业记录

我用的是拉威尔。我很难找到解决方案,这是我得到的最接近的解决方案:

$query->join('discussions', function( $join ) use ( $search_term ){
                $join->on('jobs.job_id', '=', 'discussions.job_id');
                $join->where('discussions.body', 'LIKE', $search_term );                    
                $join->orWhere('jobs.summary', 'LIKE', $search_term );                                  
            })
但这只是返回我讨论桌上的所有内容。有人有什么建议吗


谢谢:)

试试这个,看看结果如何;)

编辑:我将用正确的
DB::table('mytable')
替换
$query


EDIT2:我错过了一个半列,更正了这有SQL问题。你所做的基本上是这样的:

SELECT * FROM jobs INNER JOIN discussions ON (...) jobs.summary LIKE search_term
没有
WHERE
子句,而且
(…)
这一部分并不重要(简化了一点),因为有
,所以事实上您不(不仅)在键/fk对上加入表

您只需将那些
中的
移出join闭包,它将按预期工作:

$query->join('discussions', function( $join ) {
     $join->on('jobs.job_id', '=', 'discussions.job_id');
})
    ->where('discussions.body', 'LIKE', $search_term )
    ->orWhere('jobs.summary', 'LIKE', $search_term )
    ->get();
现在,您的查询看起来应该是:

SELECT * FROM jobs INNER JOIN discussions ON jobs.id = discussions.job_id 
    WHERE discussions.body LIKE search_term
    OR jobs.summary LIKE search_term

然后您必须更具体地使用select子句@ste771,谢谢您的解释。我遵循了您上面所说的内容,尽管查询确实如您所说呈现,但我仍然只从我的讨论表中返回结果。正在忽略jobs.summary中包含文本的作业。查询肯定是可以的,但是您可能需要
leftJoin
而不是(内部)
join
?干杯,leftJoin已经完成了操作,因为我现在得到了正确的结果:)非常感谢。但是,it job_id字段现在在从jobs表返回的结果中为空。你知道为什么会发生这种情况吗?你知道
内部连接
左连接
之间的区别吗?您将从“left”表中获得所有匹配结果(也包括那些没有相关作业的结果,因此对于其中一些作业,
job\u id
可能为空)。我会详细查的。谢谢你花时间来处理这件事。Will将标记为已接受的答案,因为尽管我没有得到我想要的,但我明白我得到了什么以及为什么:)
$query->join('discussions', function( $join ) {
     $join->on('jobs.job_id', '=', 'discussions.job_id');
})
    ->where('discussions.body', 'LIKE', $search_term )
    ->orWhere('jobs.summary', 'LIKE', $search_term )
    ->get();
SELECT * FROM jobs INNER JOIN discussions ON jobs.id = discussions.job_id 
    WHERE discussions.body LIKE search_term
    OR jobs.summary LIKE search_term