Работа с несколькими моделями и коллекциями - Laravel - PullRequest
0 голосов
/ 02 июля 2018

В моем приложении 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 в Фейсбуке, мог бы он посередине?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...