我尝试使用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的新手所以感谢任何帮助!谢谢。
答案 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