php – Laravel 4 Eloquent返回错误的ID
我的数据库中有3个表:
>广告系列 一家公司可能有一些用户.一个用户可能有一些活动.用户(具有管理员权限)可以对属于其公司的任何广告系列执行某些操作.所以,我想检查是否 我的病情 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也等于campaign.user_id(该记录同时包含campaign.id和campaigns.user_id = 8). 我无法弄清楚为什么会这样.即使我的SQL查询有问题(我怀疑是phpmyadmin返回正确的结果),我得到的条件为campaigns.id = Input :: get(‘id’),其中Input :: get(‘id’)= 13.为什么id正在改变? 当然,我可以分两步执行此安全检查,例如先获取广告系列,然后检查
如果您在phpMyAdmin中运行此查询,您应该可以看到结果包含名称为“id”的多个列.当PHP将查询结果解析为关联数组或对象时,键必须是唯一的!如果键发生碰撞,将使用最后一列!
例: SQL结果: id user_id name id name company_id 1 2 Camp1 2 Pelle 1 PHP结果: array (size=1) 0 => object(stdClass)[131] public 'id' => string '2' (length=1) public 'user_id' => string '2' (length=1) public 'name' => string 'Pelle' (length=5) public 'company_id' => string '1' (length=1) 要解决此问题,您可以添加一个select子句,仅选择广告系列列: Campaign::select('campaigns.*') ->join('users','campaigns.user_id') ->where('users.company_id',Auth::user()->company->id) ->where('campaigns.id',Input::get('id')) ->first(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |