首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel中的多对多关系中使用“with”

在Laravel中的多对多关系中使用“with”
EN

Stack Overflow用户
提问于 2015-07-24 00:01:07
回答 3查看 61关注 0票数 1

我有一个表user - User(Model),它具有以下关系:

代码语言:javascript
复制
public function roles()
    {
        return $this->belongsToMany(Config::get('entrust.role'), Config::get('entrust.role_user_table'), 'user_id', 'role_id');
    }

public function regions() {

        return $this->belongsToMany('App\Regions', 'user_region', 'user_id', 'region_id');
    }

我正在尝试此查询,但它没有得到所需的结果

代码语言:javascript
复制
$result = User::with(['roles' => function($query) {
                                $query->select('user_id','role_id');
                                }, 
                                'regions' => function($query) {
                                $query->select('user_id','region_id', 'region_name');
                                }])
                                ->where('user_id', '=', $id)
                                ->get()->toArray();

它只提供来自用户表的数据,而不提供关系数据。

我错过了什么??

EN

回答 3

Stack Overflow用户

发布于 2015-07-24 01:21:28

您正在使用的表示法应该用于constraints。从您的代码看,您实际上并不需要任何约束。

代码语言:javascript
复制
$result = User::with(['roles', 'regions'])
                                ->where('user_id', '=', $id)
                                ->first()->toArray();

您定义的关系只是一个belongsTo。您可能应该使用hasMany关系。

票数 0
EN

Stack Overflow用户

发布于 2015-07-24 04:33:18

如果你使用的是5.1版本,试试这个:

代码语言:javascript
复制
$result = User::whereHas(['roles' => function($query) {
                            $query->lists('user_id','role_id');
                            }, 
                            'regions' => function($query) {
                            $query->lists('user_id','region_id','region_name');
                            }])
                            ->where('user_id', '=', $id)
                            ->all();

如果没有,请删除all()并使用get()

票数 0
EN

Stack Overflow用户

发布于 2015-07-25 14:37:22

这对我很有效。

代码语言:javascript
复制
$users = User::with('regions', 'roles')->get();

            $userInfo = [];

            foreach ($users as $user) 
            {
                $userInfo[] = [
                        'users' => $user,
                        'regions' => $user->regions->toArray(),
                        'roles' => $user->roles->toArray(),
                ];
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31592522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档