laravel仅显示关系中的特定列

时间:2014-08-29 16:53:41

标签: laravel eloquent

我已经阅读了一些关于此的主题,但他们设法解决了我的问题......

这是我的控制器

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可以返回所有与User表记录相关的DeskUserList表记录(在deskUserList.userId = User.id上)。

实际上我想要返回的每条记录都包含:

  

DeskUserList.deskId

     

User.userName

     

例如。 [{" deskId":" 1"" USER_NAME":安东尼奥}]

我得到的是

  

[{" deskId":" 1"" USER_NAME":空}]

如您所见,用户名是空值...

BUT

如果我编辑控制器代码:

->with('userName')->get(array('userId')); //using userId rather than deskId

然后我得到了

  

[{"用户id":" 2"" USER_NAME" {" ID":" 2" "用户名":"安东尼"}}]

通过这种方式我还有两个问题:

  • userId字段重复两次
  • 我想念deskId字段(我需要......)
希望明确,谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

您需要belongsToMany,无需表示该数据透视表的模型。

我认为您的模型是DeskUser

// 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');
}

然后:

$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