gpt4 book ai didi

php - Laravel 4 Eloquent 返回错误的 ID

转载 作者:可可西里 更新时间:2023-11-01 13:03:35 24 4
gpt4 key购买 nike

我的数据库中有 3 个表:

  1. 事件
  2. 用户
  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 也等于 campaigns.user_id(该记录同时具有 campaigns.idcampaigns.user_id = 8)。

我不明白为什么会这样。即使我的 SQL 查询有问题(我怀疑 phpmyadmin 返回了正确的结果),我也得到了 where condition campaigns.id = Input::get('id'),其中 Input: :get('id') = 13。为什么要更改 ID?

当然我可以分两步进行安全检查,比如先获取事件,然后检查$campaign->user->company->id = Auth::user()->company->id 但只是想知道......

最佳答案

如果您在 phpMyAdmin 中运行此查询,您应该能够看到结果包含多个名为“id”的列。 PHP 将查询结果解析为关联数组或对象时,key 必须是唯一的!如果键发生冲突,将使用最后一列!

例子:

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)

要解决此问题,您可以添加一个选择子句以仅选择广告系列列:

Campaign::select('campaigns.*')
->join('users', 'users.id', '=', 'campaigns.user_id')
->where('users.company_id', '=', Auth::user()->company->id)
->where('campaigns.id', '=', Input::get('id'))
->first();

关于php - Laravel 4 Eloquent 返回错误的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com