В моем приложении Laravel у меня есть таблица Articles, таблица постов Facebook и таблица Tweets. Они предоставляют мне три сбора при запросе.
* 1003 Е.Г. *
$articles = App\Article::get();
$tweet_posts= App\Facebook::get();
$facebook_posts= App\Twitter::get();
Я хочу, чтобы все статьи, твиты и посты в Facebook отображались на одной странице, например, в виде большой ленты новостей, отсортированной по дате.
Данные находятся в отдельных таблицах и имеют отдельные модели.
Миграция статей выглядит следующим образом:
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('excerpt')->nullable();
$table->mediumText('content')->nullable();
$table->string('featuredImage')->nullable();
$table->mediumText('featuredVideo')->nullable();
$table->string('author')->nullable();
$table->string('readingTime', 15)->nullable();
$table->string('category')->nullable();
$table->string('published')->default('pending');
$table->boolean('featuredArticle')->default(0);
$table->timestamps();
});
и миграции на Facebook и Twitter выглядят так:
Schema::create('facebook_posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->mediumText('content')->nullable();
$table->string('featuredImage')->nullable();
$table->timestamps();
});
Schema::create('twitter_posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->mediumText('content')->nullable();
$table->string('featuredImage')->nullable();
$table->timestamps();
});
В этом сценарии таблицы Facebook и Twitter имеют значительно меньше атрибутов данных в терминах полей, чем статья.
По сути, я бы хотел, чтобы один foreach loop
прошел через все три таблицы, а затем назначил стиль на основе типа модели.
Итак, возможно ли объединить 3 коллекции в одну большую коллекцию, а затем просто иметь нулевые значения для дополнительных полей, которых нет в некоторых моделях?
В представлении (если бы все было объединено) я бы представил что-то вроде этого:
@foreach($feeds as $feed)
@if($feed->type == 'tweet')
// Twitter styled block
{{ $feed->title }}
@endif
@endforeach
Где feed - это объединенная коллекция, а ->type
- глобальная область запроса для получения типа модели. Например. App \ Статья.
В качестве альтернативы, если бы я вернул представление с тремя коллекциями, был бы способ упорядочить элементы в порядке дат, но не ограничиваясь типом коллекции?
например. Если твит 1 был до поста 3 в Фейсбуке, мог бы он посередине?