gpt4 book ai didi

php - Laravel - 在两个表之间使用连接

转载 作者:行者123 更新时间:2023-11-29 12:54:27 26 4
gpt4 key购买 nike

我有表“jobs”,由 job_id 索引,以及带有外键“job_id”的表讨论。

在工作中,我有一个名为“摘要”的专栏,在讨论中,有一个名为“正文”的专栏。我想在这两个表的两列中搜索相同的文本字符串并返回适用的作业。

例如,如果 job_id=7 的作业记录在其“summary”列中包含字符串“somestring”,并且讨论记录具有外键 job_id=20 并具有字符串“somestring”,那么我想要 job_id 的作业记录返回 =7 和 job_id=20。

我正在使用 Laravel。我无法找到解决方案,这是我得到的最接近的解决方案:

$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 );
})

但这只是返回我的讨论表中的所有内容。有人有什么建议吗?

谢谢:)

最佳答案

存在 SQL 问题。您所做的基本上是这样的:

SELECT * FROM jobs INNER JOIN discussions ON (...) jobs.summary LIKE search_term

没有 WHERE 子句,并且 (...) 部分并不重要(稍微简化一下),因为有 OR,所以实际上您不(不仅)通过 key/fk 对加入表。

您只需将那些 where 移出连接闭包,它就会按预期工作:

$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

关于php - Laravel - 在两个表之间使用连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285776/

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