Я использую Laravel 4 для своего проекта.
Я разбил результаты выборки из 4 таблиц и хотел передать их для просмотра в одной переменной.
$vehicles = DB::table('vehicle')->orderBy('postTime','DESC')->paginate(8);
$estates = DB::table('estate')->orderBy('postTime','DESC')->paginate(8);
$tradings = DB::table('trading')->orderBy('postTime','DESC')->paginate(8);
$jobs = DB::table('job')->orderBy('postTime','DESC')->paginate(8);
но я не мог слить их используя array_merge()
. Я тоже пробовал ->to_array()
после paginate это не сработало.
может кто-нибудь помочь мне здесь?
РЕДАКТИРОВАТЬ
как предложил @Turgut Sarıçam, я использовал getItems()
для моих результатов и вот мой код:
public static function index(){
$minVehicle = DB::table('vehicle')->min('price');
$maxVehicle = DB::table('vehicle')->max('price');
$minEstate = DB::table('estate')->min('price');
$maxEstate = DB::table('estate')->max('price');
$minTrading = DB::table('trading')->min('price');
$maxTrading = DB::table('trading')->max('price');
if($minVehicle == 'توافقی')
$minVehicle = 0;
if($maxVehicle == 'توافقی')
$maxVehicle = 0;
if($minEstate == 'توافقی')
$minEstate = 0;
if($maxEstate == 'توافقی')
$maxEstate = 0;
if($minTrading == 'توافقی')
$minTrading = 0;
if($maxTrading == 'توافقی')
$maxTrading = 0;
$vehicles = DB::table('vehicle')->orderBy('postTime','DESC')->paginate(8);
$estates = DB::table('estate')->orderBy('postTime','DESC')->paginate(8);
$tradings = DB::table('trading')->orderBy('postTime','DESC')->paginate(8);
$jobs = DB::table('job')->orderBy('postTime','DESC')->paginate(8);
$allResults = array_merge($vehicles,$jobs);
//echo "<meta charset='UTF8'><pre>";
//return die(print_r($allResults));
return View::make('search')->with(
array(
'minVehicle' => $minVehicle,
'maxVehicle' => $maxVehicle,
'minEstate' => $minEstate,
'maxEstate' => $maxEstate,
'minTrading' => $minTrading,
'maxTrading' => $maxTrading,
'ads' => $allResults
)
);
}
Дамп $ allResults (где я прокомментировал) дал некоторые результаты.
Я не могу показать точный результат, но вот пример этого:
Array
(
[0] => stdClass Object
(
[id] => 243
[tableName] => vehicle
)
[1] => stdClass Object
(
[id] => 239
[tableName] => vehicle
)
[2] => stdClass Object
(
[id] => 235
[tableName] => vehicle
)
[3] => stdClass Object
(
[id] => 231
[tableName] => vehicle
)
[4] => stdClass Object
(
[id] => 227
[tableName] => vehicle
)
[5] => stdClass Object
(
[id] => 223
[tableName] => vehicle
)
[6] => stdClass Object
(
[id] => 219
[tableName] => vehicle
)
[7] => stdClass Object
(
[id] => 215
[tableName] => vehicle
)
[8] => stdClass Object
(
[id] => 4
[tableName] => job
)
[9] => stdClass Object
(
[id] => 3
[tableName] => job
)
)
хотя результат кажется справедливым, никакого представления не было возвращено. просто пустая белая страница
Вы должны получить предметы в первую очередь. Попробуйте вот так:
$allResults = array_merge($vehicles->items(), $estates->items(), $tradings->items(), $jobs->items());
Изменить: я думаю, вы можете получить предметы с GetItems () функция в Laravel 4. Выше для Laravel 5, мой плохой.
Вы имеете дело с коллекциями, которые возвращаются из запроса. Не думайте, что слияние массивов — правильный путь. Попробуйте использовать слияние коллекций.
Слияние коллекций также поддерживается в laravel 4.
Попробуйте использовать это
$merged_collection = $vehicles->merge($estates)->merge($tradings)->merge($jobs);