1

У меня есть две таблицы Должности и sharedposts. В таблице sharedposts есть столбцы «user_id», «updated_at» и «post_id», где в сообщениях таблица имеет «id», «title» и «body». Я знаю об отношениях, чтобы связать обе таблицы. Все, что я хочу сделать, это отобразить каждый пост, упорядоченный по «updated_at» из обеих таблиц. Пожалуйста, помогите с построителем запросов и красноречивым способом. ThankuПолучение данных из нескольких таблиц в laravel5

ответ

0

код не тестировался, но вы можете попробовать это:

Post::whereHas('sharedpost',function($query){ 
    $query->orderBy('updated_at'); 
})->get() 
+0

Что вы пытаетесь сделать в основном? – root

+0

Сортировка всех сообщений по столбцу updated_at в таблице sharedpost. – smartrahat

+0

да, я думаю, что это работает, позвольте мне проверить – root

0

Может быть, немного другой подход, если не будет много обновлений моделей? Таким образом, я полагаю, что чтение должно быть быстрее (кто-то пожалуйста, поправьте меня, если я ошибаюсь, здесь)

Добавить поле в таблицу, создав новую миграцию и adding

$table->timestamp('last_updated'); 

Затем с помощью Events обновления поля всякий раз, когда Post или SharedPost обновляется, добавив в AppServiceProvider:

public function boot() 
{ 
    Post::saving(function ($post) { 
     $post->last_updated = Carbon::now(); 
    }); 
} 

Я не уверен, если это будет работать, хотя и это было бы понятно, если вы Returne d обратной связи, так как я ленив попробовать себя в данный момент :). Худший случай может возникнуть необходимость изменить метод, как:

public function boot() 
{ 
    SharedPost::saved(function ($sharedpost) { 
     $sharedpost->post->last_updated = Carbon::now(); 
     $sharedpost->save(); 
    }); 
} 

или вы могли бы проверить наблюдатель, если вы не хотите, чтобы код в AppServiceProvider. Не использовали его, но это кажется простым.

Тогда вы могли бы просто Post::orderBy('last_updated')->get();

Таким образом, вы будете иметь один или два входа в базу данных, но я думаю (и ребята, пожалуйста, поправьте меня, если я ошибаюсь) get() должен быть быстрее. Имейте в виду, что я далек от эксперта MySQL.

И в конце вы можете сделать это еще быстрее, сохранив эти данные в Cache, используя Redis.

Смежные вопросы