Laravel在ajax上的dd调用方法返回总是空属性

时间:2018-01-23 10:54:42

标签: laravel laravel-5 laravel-5.5

我对ajax称为方法很痛苦。

首先是与上述相同的请求:

$usersData = User::where('name', 'like', $queryString . '%')
            ->orWhere('email', 'like', $queryString . '%')
            ->orWhere('username', 'like', $queryString . '%')
            ->when($limit > 0 || $offset > 0, function ($usersData) use ($limit, $offset) {
                $usersData->take($limit)->skip($offset);

            })
            ->with(array('roles'=>function($query){
                $query->select('name');
            }))
            ->get();

在索引方法中完美运行,dd是正确的,'roles'只包含'name'字段但是如果我调用完全相同的请求'roles'包含所有属性而dd没有工作我被迫制作一个console.log我的数据我疯了!

这是完整的功能:

public function ajaxQuery(Request $request): string
{

    $queryString = $request->input('queryString');
    $offset = $request->input('offset');
    $limit = $request->input('limit');


    $usersData = User::where('name', 'like', $queryString . '%')
        ->orWhere('email', 'like', $queryString . '%')
        ->orWhere('username', 'like', $queryString . '%')
        ->when($limit > 0 || $offset > 0, function ($usersData) use ($limit, $offset) {
            $usersData->take($limit)->skip($offset);
        })
        ->with(array('roles'=>function($query){
            $query->select('name');
        }))
        ->get();
        //->toJson();

    foreach ($usersData as $key =>$user){
        //$v['roles'] = $v['roles'][0]['name'];
        //dd($v);
        //$user->role = $user->role[0]['name'];
        //dd($user->role[0]['name']);
        //dd($user);
    }

    //$usersDatas['data'] = json_decode($usersData, true);
    $usersDatas['data'] = $usersData;


    $usersDatas['count'] = $usersData = User::where('name', 'like', $queryString . '%')
        ->orWhere('email', 'like', $queryString . '%')
        ->orWhere('username', 'like', $queryString . '%')->get()->count();

    $usersDatas = json_encode($usersDatas);

    return $usersDatas;

}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当您急切地加载特定列时(就像使用“角色”一样),您需要在列列表中指定id列。

来自Laravel documentation

  

您可能并不总是需要与您的关系中的每一列   检索。因此,Eloquent允许您指定哪个   您要检索的关系列:

     

$ users = App \ Book :: with('author:id,name') - > get();

     

使用此功能时,您应始终包含id列   您要检索的列的列表。

$usersData = User::where('name', 'like', $queryString . '%')
            ->orWhere('email', 'like', $queryString . '%')
            ->orWhere('username', 'like', $queryString . '%')
            ->when($limit > 0 || $offset > 0, function ($usersData) use ($limit, $offset) {
                $usersData->take($limit)->skip($offset);
            })
            ->with(array('roles'=>function($query){
                $query->select(['name', 'id']);
            }))
            ->get();