Подтвердить что ты не робот

Как объединить объекты 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;
}

Мне сказали qaru.site/info/36580/..., что это работает в PHP 5.3+. Однако это возвращает следующую ошибку в Laravel:

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

Как реализовать этот метод в Laravel? Оба $mc и sm возвращают допустимые объекты в Laravel.

4b9b3361

Ответ 1

Здесь вы можете объединить массивы двух результатов запроса, а затем использовать Response с json-выходом, как показано ниже.

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

Ответ 2

В настоящее время вы можете использовать

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

Это работает в Laravel 4 и, похоже, обрабатывает как массивы, так и коллекции.

Ответ 3

Мы можем использовать коллекцию, как показано ниже

$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

Ответ 4

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

Ответ 5

Вы можете просто использовать функцию array_merge(firstObject,secondObject).

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