如何在Laravel中执行MYSQL查询?

5

我有一个MYSQL查询语句,我想在Laravel中执行这个查询。

    select d1.update_id from ( select update_id, count(update_id)
 as ct from updates_tags where tag_id in 
(67,33,86,55) group by update_id) as d1 where d1.ct=4

请指导我如何轻松地完成它。我手头有一个参考资料,但它无法正常工作。
    $updateArray = DB::table('updates_tags')
->select('update_id', DB::raw('count(*) as update_id'))
->whereIn('tag_id',$jsontags)
->groupBy('update_id')
->having('update_id','=',count($jsontags))
->lists('update_id');

请说明具体哪里出了问题,是否有错误?如果有,请指出错误类型;如果没有,请说明你得到的结果是什么。 - n00dl3
@n00dl3:我无法按照Laravel格式排列查询,执行时出现SQL查询违规错误。 - Makerz
你尝试过在MySQL中执行单个查询,而不使用PHP/Laravel吗?我不确定,但是...如果您的查询出现错误会怎样呢? - Juanjo Salvador
http://code.tutsplus.com/tutorials/build-web-apps-from-scratch-with-laravel-the-eloquent-orm--net-25631 - Renjith V R
JuanjoSalvador: 它与MySQL很好地配合,并给我想要的输出。但是无法在Laravel中转换它。 - Makerz
3个回答

4
您可以直接进行原始查询,像这样:

$sqlQuery = "SELECT d1.update_id FROM...";
$result = DB::select(DB::raw($sqlQuery));

$result 将是一个数组


出现了以下错误:无法将 stdClass 类的对象转换为字符串。 - Makerz
你在哪里做这件事?在控制器里吗?尝试打印它,看看你得到什么。使用var_dump($result)或print_r($result)。 - Tomer Ofer
数组 ( [0] => stdClass Object ( [update_id] => 2 )) {"code":"","message":"","results":[]} - Makerz
数组 ( [2] => 2 ) 数组(1) { [0]=> object(stdClass)#651 (1) { ["update_id"]=> int(2) } } - Makerz
所以你的查询是不正确的,与Laravel本身无关。请向我们展示你的数据结构,然后我们可以帮助你。 - Tomer Ofer

2

where('total','=',count($tags))更改为having('total','=',count($tags))

$update = DB::table('tags')
->select('t_id', 'u_id', DB::raw('count(*) as total'))
->whereIn('t_id',$tags)
->groupBy('u_id')
->having('total','=',count($tags))
->lists('u_id');

我是laravel的初学者。它的工作方式和MYSQL查询一样吗?选择d1.update_id从(选择update_id,计数(update_id)as ct from updates_tags where tag_id in (67,33,86,55) group by update_id)as d1 where d1.ct=4 - Makerz
update_id已经被使用了,所以您不能将其用作别名。这就是您作为第一个选择使用的内容。请给它取另一个名称。 - oseintow
是的,我从上面的Laravel查询中获取了正确的值,它返回了update_id。$updateArray = UpdatesTags :: whereIn('tag_id',$ jsontags)-> lists('update_id');这将返回数组,但我们的查询不会。 - Makerz
如果你想返回数组,可以在查询语句后面加上 ->all()。就像这样 ->lists('u_id')->all(); - oseintow
在非对象上调用成员函数all()。 - Makerz
刚刚检查了一下,我认为这是因为你正在使用查询生成器。如果不使用 ->all(),你会得到什么结果? - oseintow

0
在经典的PHP中,我们过去常使用mysqli连接器。在CodeIgniter中,我们使用ActiveRecords(非常可爱)。在Laravel中,也有用于SQL查询的ActiveRecords。
请查看官方Laravel文档,查询构建器是您的好朋友。https://laravel.com/docs/4.2/queries

我尝试了官方的Laravel文档,但没有成功,所以我来这里寻求帮助。 - Makerz
请检查您的查询语句,可能存在 SQL 错误。 - Juanjo Salvador
从(更新标签)中选择d1.update_id,其中tag_id在(67,33,86,55)中,并且按update_id计算count(update_id)为ct。然后从d1中选择d1.ct = 4的update_id。 这个MYSQL查询为我提供了我想要的输出。这是正确的。 - Makerz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接