我对Eloquent有一种相当奇怪的需求。我需要使用雄辩的方式来表示以下查询。这些值直接来自用户输入,所以我不知道如何处理。
SELECT
GROUP_CONCAT(Table1.table2ID) AS table2ID,
GROUP_CONCAT(Table1.table3ID) AS table3ID
FROM
Table1
HAVING table2ID LIKE '%1%' AND (table3ID LIKE '%123%' OR '%456%')
AND table2ID LIKE '%2%' AND (table3ID LIKE '%789%' OR '%012%')注意:这是一个极小的查询版本,以减少混淆,但这是我遇到问题的部分。
$query->having(...)不支持$query->where所支持的闭包方法。
发布于 2015-11-12 18:48:05
如果您的查询对于eloquent来说太复杂,那么可以认为eloquent的要点是做更多的可读性和更容易的代码。没有必要使自己过于复杂,创建一个可以将原始查询添加到模型的作用域,如下所示:
use Illuminate\Database\Eloquent\Model;
class MiModel extends Model
{
public function scopeHasWhatIneed($query)
{
return $query->select(DB::raw("your complex query here"));
}
}现在你可以使用你的模型,使用不稳定的代码:
$mi_model->hasWhatIneed()->where(.....)->orderby...注意,对于原始查询,您需要保护自己不受sql注入的影响。
https://stackoverflow.com/questions/33669356
复制相似问题