2017-03-02 105 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 */ });