2017-03-02 102 views
0

我正在Laravel中开发一个Web应用程序。下面的代码不是从应用程序,但给你一个简单的想法,我有问题。array_push()函数在Laravel中不工作

下面的代码工作

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

什么是var_dump($ users)的结果; ? – Muthu17

+0

看起来你正在循环一个数组来创建另一个数组,然后在全局数组中进行赋值。你为什么这样做?相反,你不能直接分配数组? –

+0

我觉得这里缺少一些东西。除非用户表为空(在这种情况下,第一个片段将包含一个对象,第二个片段将包含一个空数组),但这两个片段中的任何一个都不应该失败。 – apokryfos

回答

3

User::all();返回类型collection (Illuminate\Database\Eloquent\Collection)。 的代码,所以第一个块,你delcared数组$users = [];并立即将其覆盖:

$this->my_users = User::all(); 

所以你基本上是分配集合$this->my_users

您正在循环收集并将其分配给数组的第二个代码块。

$this->my_users = [ 
    //instance of App\User 1, 
    //instance of App\User 2 etc 
]; 

尝试dd结果,你应该能够看到更清晰的图像。

+0

所以我需要做的是创建一个集合的实例,然后添加到该集合。你知道如何做到这一点?我试过$ users = new \ Illuminate \ Database \ Eloquent \ Collection;没有工作。 –

+0

你可以将它添加到一个普通的数组并通过执行'collect($ usersArray)'将其转换为集合' – SteD

+0

我不明白你的意思。我有一个集合all_users,我该如何创建另一个集合,以便可以将来自all_users集合的特定用户添加到集合中?我无法将all_users的实例添加到数组中。 –

-1

$users.push($user); 我认为这是你如何推到你的阵列

+0

虽然 – apokryfos

+0

我不好。这就是你如何在JavaScript中做到这一点,但不是在拉拉维尔我猜 – vans

1

Laravel的查询结果始终为collection,因此如果过滤是您真正需要的,那么请执行以下操作:

$users = Users::all()->filter(function ($u) { /* conditions to accept the user */ });