【发布时间】:2014-07-06 07:48:24
【问题描述】:
有两个表是多对多关系:
用户:
<?php class User extends Eloquent {
public function roles()
{
return $this->belongsToMany('Role');
}
}
角色:
class Role extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
}
获取所有字段的用户并将其转换为json没有问题:
$role = Role::find($id)->users()->get()->toArray();
var_dump($role);
但是当我试图只检索用户 id 字段时,我遇到了将其转换为 json 的问题,这是我的代码:(如果我不调用 ->get()->toArray(), var_dump 没有问题。)
$role = Role::find($id)->users()->select(array('id'))->get()->toArray();
var_dump($role);
有什么想法吗?谢谢
编辑:
错误信息:
Slim Application Errorbody{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif;}h1{margin:0;font-size:48px;font-weight:normal;line -height:48px;}strong{display:inline-block;width:65px;}
Slim 应用程序错误
由于以下错误,应用程序无法运行:
详情
类型: Illuminate\Database\QueryException代码: 23000消息: SQLSTATE[23000]:完整性约束违规:1052 字段列表中的列 'id'是模棱两可的(SQL:选择id,users.*,role_user.role_id as pivot_role_id,role_user.user_id as pivot_user_id from users@34 内连接@987653 987654335@.id = role_user.user_id 其中role_user.role_id = role_1)文件: /Users/Public/Website/cast/vendor/illuminate/database/Illuminate /Database/Connection.php行: 555跟踪
#0 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Connection.php(283): Illuminate\Database\Connection->run('select id, u...', Array, Object(Closure))
<div>#1 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Query/Builder.php(1312): Illuminate\Database\Connection->select('selectid ,u...',数组)
#2 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Query/Builder.php(1302): Illuminate\Database\Query\Builder->runSelect()
#3 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Query/Builder.php(1289): Illuminate\Database\Query\Builder->getFresh(Array)
#4 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php(416): Illuminate\Database\Query\Builder->get(Array)
#5 /Users/Public/Website/cast/vendor/illuminate/database/Illuminate/Database/Eloquent/Relations/BelongsToMany.php(145): Illuminate\Database\Eloquent\Builder->getModels()
#6 /Users/Public/Website/cast/app/controllers/Api/v1/TestController.php(24): Illuminate\Database\Eloquent\Relations\BelongsToMany->get()
#7【内部函数】:Api\v1\TestController->testRelation('role_1')
#8 /Users/Public/Website/cast/vendor/slim/slim/Slim/Route.php(173): call_user_func_array(Array, Array)
#9 [内部函数]:Slim\Route->Slim{closure}('role_1')
#10 /Users/Public/Website/cast/vendor/slim/slim/Slim/Route.php(462): call_user_func_array(Object(Closure), Array)
#11 /Users/Public/Website/cast/vendor/slim/slim/Slim/Slim.php(1326): Slim\Route->dispatch()
#12 /Users/Public/Website/cast/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim->call()
#13 /Users/Public/Website/cast/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call()
#14 /Users/Public/Website/cast/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
#15 /Users/Public/Website/cast/vendor/slim/slim/Slim/Slim.php(1271): Slim\Middleware\PrettyExceptions->call()
#16 /Users/Public/Website/cast/vendor/illuminate/support/Illuminate/Support/Facades/Facade.php(205): Slim\Slim->run()
#17 /Users/Public/Website/cast/public/index.php(4): Illuminate\Support\Facades\Facade::__callStatic('run', Array)
#18 /Users/Public/Website/cast/public/index.php(4): SlimFacades\App::run()
#19 {主要}
编辑 2:
错误是由 select 语句中的字段引起的。我把它改成:
$role = Role::find($id)->users()->select(array('users.id'))->get()->toArray();
var_dump($role);
它现在返回一些值。但不幸的是,它仍然返回所有字段,而不仅仅是“users.id”字段。
【问题讨论】:
-
什么是“型号”?角色不应该扩展 Eloquent 吗?
-
对不起。这是一个雄辩的模型。 (我正在使用扩展 Eloquent 的 SlimStarter)。
-
您尝试运行命令时遇到的“问题”/“错误”是什么?
-
我认为我应该使用“users.id”。
-
在我修复了文件名问题后,我可以得到结果。但不幸的是,它仍然返回所有字段而不是我选择的字段。