如何在控制器中合并Laravel对象

时间:2013-01-11 17:31:13

标签: php laravel

我有一个控制器,我希望将来自多个表的数据与并行结构相结合。我最终想要得到的是一个可以从控制器返回的对象,所以我可以在Backbone中解析它。

我想做这样的事情:

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;
}

another post on StackOverflow告诉我,这适用于PHP 5.3+。但是,这会在Laravel中返回以下错误:

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

如何在Laravel中实现此方法? $mcsm都返回Laravel中的有效对象。

5 个答案:

答案 0 :(得分:41)

现在你可以使用

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

这适用于Laravel 4,似乎同时处理数组和集合。

答案 1 :(得分:25)

你可以在这里做的是合并两个查询结果的数组,然后使用带有json输出的Response,如下所示。

$array = array_merge($mc->toArray(), $sm->toArray());
return Response::json($array);

答案 2 :(得分:7)

我们可以使用如下收集

$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

答案 3 :(得分:2)

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()。

答案 4 :(得分:0)

您可以简单地使用array_merge(firstObject,secondObject)函数。

$obj = array_merge($mc, $sm);
return $obj;