我在Laravel开发Web应用程序。以下代码不是来自应用程序,而是让您简单了解我遇到的问题。
以下代码可以使用
public $my_users = []; //This is outside function
$users = [];
$users = User::all();
$this->my_users = $users;
这非常简单,工作正常。但是,我希望能够遍历所有用户并添加我选择的用户:
public $my_users = []; //This is outside function
$users = [];
$all_users = User::all();
foreach ($all_users as $user)
{
array_push($users, $user);
}
$this->my_users = $users;
同样,我在这里做的事情背后没有任何逻辑,它只是一个例子。
在这种情况下,两段代码应该具有相同的结果。但是,第二段代码不起作用。似乎是array_push函数不在这里工作。这有什么原因吗?我该怎么办?
答案 0 :(得分:3)
User::all();
会返回collection (Illuminate\Database\Eloquent\Collection)
类型。
因此,您首先使用数组$users = [];
来代码并使用以下命令覆盖它:
$this->my_users = User::all();
因此,您基本上将一个集合分配给$this->my_users
。
第二个代码块,您将循环遍历该集合并将其分配给该数组。
$this->my_users = [
//instance of App\User 1,
//instance of App\User 2 etc
];
尝试dd
结果,您应该能够看到更清晰的图片。
答案 1 :(得分:1)
Laravel的查询结果始终为collection,因此如果过滤是您真正需要的,那么请执行以下操作:
$users = Users::all()->filter(function ($u) { /* conditions to accept the user */ });
答案 2 :(得分:0)
您可以使用Laravel的默认帮助程序而不是array_push
array_add()
请参阅此处的文档: https://laravel.com/docs/5.4/helpers#method-array-add
答案 3 :(得分:-1)
$users.push($user);
我认为这是你进入阵列的方式