簡體   English   中英

在Laravel的多對多關系中使用'with'

[英]Using 'with' in many-to-many relationship in Laravel

我有一個表用戶-User(Model),它具有以下關系:

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

我正在嘗試此查詢,但不是我所需的結果

$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();

它僅提供用戶表中的數據,不提供關系數據。

我錯過了什么?

您使用的符號應用於constraints 從您的代碼看來,您實際上並不需要任何約束。

$result = User::with(['roles', 'regions'])
                                ->where('user_id', '=', $id)
                                ->first()->toArray();

您定義的關系僅是一個belongsTo。 您可能應該使用hasMany關系。

如果您使用的是5.1,請嘗試以下操作:

$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()

這對我有用。

$users = User::with('regions', 'roles')->get();

            $userInfo = [];

            foreach ($users as $user) 
            {
                $userInfo[] = [
                        'users' => $user,
                        'regions' => $user->regions->toArray(),
                        'roles' => $user->roles->toArray(),
                ];
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM