27

複数のテーブルのデータを並列構造で結合したいコントローラーがあります。最終的には、コントローラーから返すことができる1つのオブジェクトを使用して、バックボーンで解析できるようにします。

私はこのようなことをしたい:

public function index()
{
    $mc = MainContact::where('verified', '=', '1')->get();
    $sm = SendMessage::where('verified', '=', '1')->get();

    $obj = (object) array_merge((array) $mc, (array) $sm);
    return $obj;
}

StackOverflowの別の投稿で、これはPHP5.3以降で機能すると言われています。ただし、これによりLaravelで次のエラーが返されます。

UnexpectedValueException: The Response content must be a string or object implementing
 __toString(), "object" given.

Laravelでこのメソッドを実装するにはどうすればよいですか?両方ともLaravelで有効なオブジェクト$mcを返します。sm

4

5 に答える 5

48

今日はあなたが使うことができます

$new_collection = $collection->merge($other_collection)

これはLaravel4で機能し、配列とコレクションの両方を処理するようです。

于 2013-10-24T13:09:13.573 に答える
33

ここでできることは、2つのクエリ結果の配列をマージしてから、以下に示すように、応答とjson出力を使用することです。

$array = array_merge($mc->toArray(), $sm->toArray());
return Response::json($array);
于 2013-01-11T21:00:24.763 に答える
9

コレクションは以下のように使用できます

$admins = User::where('type', '=', 'admin')->get();

$authors = User::where('type', '=', 'author')->get();

$admin_author_collection = $admins->merge($authors);

また、以下のリンクからさまざまな収集方法を参照してください

http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html

于 2014-10-17T06:39:29.407 に答える
3
Route::get('test', function(){
    $rank = Rank::get();
    $policy = Policy::get();
    $obj = (object)array_merge_recursive((array)$rank , (array)$policy);
    var_dump($obj);
});

これは私のために働いています。array_mergeの代わりに、array_merge_recursive()を使用してください。

于 2014-02-02T17:59:37.417 に答える
-3

あなたは単にarray_merge(firstObject,secondObject)関数を使うことができます。

$obj = array_merge($mc, $sm);
return $obj;
于 2019-09-09T10:26:58.770 に答える