laravel仅显示关系中的特定列

laravel仅显示关系中的特定列,laravel,eloquent,Laravel,Eloquent,我读过一些关于这方面的话题,但他们设法部分解决了我的问题 这是我的控制器 class DeskController extends BaseController{ public function getDeskUsers($deskId){ $user = DeskUserList::where(function($query) use ($deskId){ $query->where('deskId', $deskId); })->with('us

我读过一些关于这方面的话题,但他们设法部分解决了我的问题

这是我的控制器

class DeskController extends BaseController{

public function getDeskUsers($deskId){
    $user = DeskUserList::where(function($query) use ($deskId){
        $query->where('deskId', $deskId);
    })->with('userName')->get(array('deskId'));

    if (!$user->isEmpty())
        return $user;
    return 'fail';
}
这就是模型

class DeskUserList extends Eloquent {

  protected $table = 'desk_user_lists';

  public function userName(){
    return $this->belongsTo('User', 'userId')->select(array('id','userName'));
  }
}
getDeskUsers方法可以返回与用户表记录相关的所有DeskUserList表记录
(在DeskUserList.userId=User.id上)

实际上,我希望返回的每个记录由以下内容组成:

DeskUserList.deskId

User.userName

例如,
[{“deskId”:“1”,“用户名”:antonio}]

我得到的是

[{"deskId":"1","user_name":null}]
如您所见,用户名是空值

但是

如果我编辑控制器代码:

->with('userName')->get(array('userId')); //using userId rather than deskId
然后我得到

[{"userId":"2","user_name":{"id":"2","userName":"antonio"}}]
这样我还有两个问题:

  • userId字段重复两次
  • 我错过了deskId字段(我需要…)

希望是明确的,谢谢你的时间

您需要
属于透视表
,不需要表示透视表的模型

我假设您的型号是
桌面
用户

// Desk model
public function users()
{
 return $this->belongsToMany('User', 'desk_user_list', 'deskId', 'userId');
}

// User model
public function desks()
{
 return $this->belongsToMany('Desk', 'desk_user_list', 'userId', 'deskId');
}
然后:


您需要
选择
外键和引用的主键,以便Eloquent能够将相关模型与其父项匹配。无论如何,这可能是错误的做法。因此,首先指定为什么需要
选择
?桌面用户列表就像一个透视表。。。它有三个基本字段:id(PK)、userId(FK)和tableId(FK)。正如您可以想象的那样,它表示在每个表上设置的用户列表。因此,遵循模式id>(userId deskId)的值示例可以是:1>(7 6);2> (4 6); 3> (2 6); 4> (5 8); 5> (1 8); 这意味着我们有用户7、4和2坐在表6上,用户5、1坐在表8上,现在我想让所有的用户名都坐在每个表上,例如7>6;4> 6; 2> 6; 5> 8; 1> 8;  这就是我想要的回答…检查我的答案,这就是你需要的。如果您有问题,请随时回答是的,我有…我不明白,对不起…我想您的回答让我了解了pivot table在laravel中的工作原理。。。但是我想我不能使用你的解决方案,因为在桌面用户列表表中,我还有时间戳和softDelete字段,我用来在用户会话过期时从表中删除用户。。。但是也许还有其他的方法…谢谢!只需在关系定义中使用
with pivot([…字段需要转到此处])
,就可以通过
$desk->users->first()->pivot
-当然,您不需要先使用
这只是一个示例
$desks = Desk::with('users')->get(); // collection of desks with related users

foreach ($desks as $desk)
{
  $desk->users; // collection of users for particular desk
}

// or for single desk with id 5
$desk = Desk::with('users')->find(5);
$desk->users; // collection of users
$desk->users->first(); // single User model