Laravel链式Eloquent Query无法返回结果数组

时间:2018-02-02 12:39:58

标签: php laravel

我正在尝试在Laravel上进行链式Eloquent查询,并使用条件带来用户表中的用户,即如果它们属于确定的房子。我正在努力寻找让它发挥作用的方法。有人能帮助我吗?

这是我的控制器方法:

public function create(){

        if(Auth::user()->role->id == 1){

            $house = House::findOrFail(Auth::user()->house->id);

            $jobs = Job::pluck('name', 'id')->all();
            $categories = Category::pluck('name', 'id')->all();
            $users = User::pluck('name', 'id')->where('house_id', $house)->get();

            return view('admin.tasks.create', compact('jobs', 'categories', 'users'));

        }else{

            return redirect('home');

        }

    }

使用get()的时候抛出了错误:

Type error: Too few arguments to function Illuminate\Support\Collection::get(), 0 passed in /Applications/MAMP/htdocs/Housing_around/app/Http/Controllers/AdminTasksController.php on line 55 and at least 1 expected

正如所想,最后all()并没有给我带来返回数组中的任何内容

有人知道如何继续吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

使用正确的语法来避免错误:

$jobs = Job::pluck('name', 'id');
$categories = Category::pluck('name', 'id');
$users = User::where('house_id', $house)->pluck('name', 'id');

答案 1 :(得分:2)

您无法在pluck()

之后使用get()
$jobs = Job::pluck('name', 'id');
$categories = Category::pluck('name', 'id');
$users = User::where('house_id', $house)->pluck('name', 'id');

答案 2 :(得分:2)

我建议您使用策略来确定当前经过身份验证的用户的角色。 如果您认为控制器中的此方法具有处理权限,则从数据库中获取数据并将其传递给视图。

当控制器角色时它只是模型(数据结构)和表示(视图)之间的桥梁

查看Laravel authorization.

然后pluck()方法是一种方法,它会调用get(),因此你无法同时调用它们。 all() vs get()的相同内容都是在幕后调用方法。

所以喜欢$users = User::where('house_id', $house)->pluck('name', 'id');