【问题标题】:can not access to items of a paginated union query results无法访问分页联合查询结果的项目
【发布时间】:2016-12-11 11:27:59
【问题描述】:

我想对 Union 查询结果进行分页。我写了这个:

    use Illuminate\Support\Facades\Input;
    use Illuminate\Pagination\Paginator;

    $page = Input::get('page', 1);
    $paginate = 10;

    $members = DB::table("members")
                ->select("id", "first_name", "last_name", "email", "created_at")
                ->where("site_id", $id);

    $users = DB::table("users")
                ->select("id", "first_name", "last_name", "email", "created_at")
                ->where("site_id", $id)
                ->union($members)
                ->get()->toArray()

    $slice = array_slice($users, $paginate * ($page - 1), $paginate);
    $data = new Paginator($slice, $paginate);

    return View::make('main.pages.search',compact('data','searchTerm'));

现在我想访问search刀片模板中的结果。假设我写了这个:

<div class="container">
    @foreach ($data as $user)
        {{ $user->first_name }}
    @endforeach
</div>

{{ $data->links() }}

但是我收到了这个错误:

Trying to get property of non-object (View: D:\wamp\www\aids\resources\views\main\pages\search.blade.php

无法识别$user,它是name 属性

什么是问题?

更新:
而上面的return $data 则返回这个:

{
    "per_page": 2,
    "current_page": 1,
    "next_page_url": null,
    "prev_page_url": null,
    "from": 1,
    "to": 2,
    "data": [
        {
            "id": 6,
            "first_name": "ali",
            "last_name": "hassani",
            "created_at": "2012-04-16 22:11:46",
            "email": "ali@gmail.com",
        },
        {
            "id": 7,
            "first_name": "hossein",
            "last_name": "rezaei",
            "created_at": "2012-04-16 22:11:46",
            "email": "reza@gmail.com",
        },
    ]
}

我尝试$data-&gt;data 访问结果,但出现同样的错误。

更新 2:

我发现当我像这样添加{{dd($user)}} 时:

<div class="container">
    @foreach ($data as $user)
        {{dd($user)}}
        {{ $user->first_name }}
    @endforeach
</div>

返回 array 包含 Result 而不是 object

【问题讨论】:

  • 您选择了 first_name 和 last_name 但您试图显示 $user-&gt;name?
  • 我尝试过,但出现了同样的问题。
  • var_dump($data) 并检查它是否没有添加新的深度级别。

标签: php laravel pagination laravel-5.3


【解决方案1】:

在您的控制器中,您正在对查询结果调用函数toArray,它将集合转换为普通的PHP array。如果集合的值是 Eloquent 模型,模型也会被转换为数组。

因此,您的foreach 应为:

<div class="container">
    @foreach ($data['data'] as $user)
        {{ $user['first_name'] }}
    @endforeach
</div>

【讨论】:

  • 我使用了toArray 因为array_slice 的第一个参数只给出了一个数组。为此,我必须将集合 eloquent 更改为数组。还有其他方法可以防止将 Eloquent 模型转换为数组吗?
  • 您可以使用slice 集合方法,它返回从给定索引开始的集合切片。
【解决方案2】:

根据@iCode的指导,我发现我应该使用slice而不是array_slice方法。事实上,使用array_slice 的部分代码更改为:

$slice = $workshops->slice($paginate * ($page - 1), $paginate);

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2013-06-07
    • 2012-05-20
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多