2017-03-02 14 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; 

繰り返しますが、私はここでやっていることは、それは一例ですが、その背後に何のロジックを持っていません。

この場合、両方のコードで同じ結果が得られるはずです。しかし、2番目のコードは機能しません。ここで動作していないarray_push関数のようです。これは何か理由はありますか?私はここで何をするべきですか?

+0

var_dump($ users)の結果とは何ですか? ? – Muthu17

+0

配列をループして別の配列を作成し、グローバル配列に代入しているようです。なぜあなたはそれをやっているのですか?代わりに直接配列を割り当てることはできませんか? –

+0

ここに欠けているものがあるような気がします。 usersテーブルが空でない場合(最初のスニペットにはオブジェクトがあり、2番目のスニペットには空の配列があります)、失敗するはずのスニペットの部分はありません。 – apokryfos

答えて

3

User::all();は、タイプcollection (Illuminate\Database\Eloquent\Collection)を返します。ですから、基本的に$this->my_usersにコレクションを割り当てている

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

:あなたは、配列$users = [];をdelcared、すぐにそれをオーバーライドするコードの だから、最初のブロック。

2番目のコードブロックは、コレクションをループして配列に割り当てます。

$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のインスタンスを配列に追加することはできません。 –

0

現在のドキュメントを参照してくださいarray_push

array_add() 

するのではなく、Laravelのデフォルトのヘルパーを使用することができます。私はこれがあなたの配列にプッシュするかと思い https://laravel.com/docs/5.4/helpers#method-array-add

-1

$users.push($user);

+0

を使うことができます。 – apokryfos

+0

私の悪いですが。それはあなたがjavascriptでやっているのですが、laravelではありません – vans

1

Laravelのクエリ結果は常にcollectionです。フィルタリングが本当に必要な場合は、

$users = Users::all()->filter(function ($u) { /* conditions to accept the user */ }); 
関連する問題