Laravel diff($ collection)抛出错误

时间:2014-08-28 11:57:17

标签: database laravel collections diff pivot-table

我尝试使用diff-Function使用数据透视表获取与多对多关系中的某个项目无关的所有项目。

这是我想出的: 我想使用diff($collection)函数,但我总是得到以下错误:

  

传递给Illuminate \ Support \ Collection :: __ construct()的参数1必须   是类型数组,给定对象,调用    * /vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php   在第157行并定义

在此处查看此功能的示例:http://www.neontsunami.com/post/new-collection-methods-in-laravel-4-1

我将以下两行添加到app.php

中的providers数组中
'Illuminate\Support\Collection',
'Illuminate\Database\Eloquent\Collection',

这是User.php中的代码:

public function scopeNotProject($query, $project_id)
    {   $all_users = Users::all();
        $participants = Project::find($project_id)->users;
        $nonparticipants = $all_users->diff($participants);
        return $nonparticipants;
    }

和我的观点:

@foreach(User::notProject($project_id)->get() as $nonparticipant)
                  <option value="{{ $nonparticipant->id }}">{{ $nonparticipant->firstname . " " . $nonparticipant->lastname }}</option>
@endforeach

据我所知,传递的项目应该是Collection而不是数组(?)。我是laravel的新手所以感谢任何帮助!谢谢。

2 个答案:

答案 0 :(得分:0)

这是因为第一个参数需要是一个数组,它告诉你。因为用户是一个集合,所以这是一个对象,你不能将数组与一个对象进行比较。

更改

$participants = Project::find($project_id)->users;

$participants = Project::find($project_id)->users->toArray();

答案 1 :(得分:0)

我找到了解决问题的方法:):

@foreach (User::all()->diff(Project::find($project_id)->users) as $nonparticipant)
    <option value="{{ $nonparticipant->id }}">{{ $nonparticipant->firstname . " " . $nonparticipant->lastname }}</option>
@endforeach