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正在改变?

当然,我可以分两步执行此安全检查,例如先获取广告系列,然后检查
$campaign-> user-> company-> id = Auth :: user() – > company-> 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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载
为什么laravel比yii火
一些常见的Laravel定时任务不运行的问题
laravel用路由有什么好处
composer无法安装laravel怎么办
laravel现在还用吗
laravel怎么替换主键id
laravel的appurl有什么用
如何修改Laravel的报错输出形式
laravel怎么避免foreach查表
laravel怎样操作数据库
laravel怎么截取字符串
laravel 是国内的吗
laravel怎么设置请求头
浅析Laravel社区Redis组件报错的问题和解决方法