我在我的数据库中有三张表:
我的条件:
使用phpmyadmin我尝试了相同的查询,并得到了一个ID为13的活动。但是当我调试我的应用程序时,发现...
- 活动
- 用户
- 公司
我的条件:
Campaign::join('users', 'users.id', '=', 'campaigns.user_id')
->where('users.company_id', '=', Auth::user()->company->id)
->where('campaigns.id', '=', Input::get('id'))
->first();
如果我得到了唯一的活动 - 这很好,如果我得到了空值 - 说明出了问题,我会向用户发送“拒绝访问”的信息,因为他正在处理其他公司的活动。
这段代码生成了下面的查询:
array(3) {
["query"]=>
string(148) "select * from `campaigns` inner join `users` on `users`.`id` = `campaigns`.`user_id` where `users`.`company_id` = ? and `campaigns`.`id` = ? limit 1"
["bindings"]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(2) "13"
}
["time"]=>
float(0.42)
}
使用phpmyadmin我尝试了相同的查询,并得到了一个ID为13的活动。但是当我调试我的应用程序时,发现...
dd($campaign->id);
返回的结果是8。8也等于campaigns.user_id
(该记录同时拥有campaigns.id
和campaigns.user_id = 8
)。
我不知道为什么会出现这种情况。即使我的SQL查询有问题(我怀疑phpmyadmin返回了正确的结果),我也有一个where条件campaigns.id = Input::get('id')
,其中Input::get('id') = 13
。为什么id会被改变?
当然,我可以分两步进行安全检查,首先获取广告系列,然后检查$campaign->user->company->id = Auth::user()->company->id
,但只是想知道……