1

私は2つのテーブルを持っています投稿共用ポストです。 sharedpostsテーブルには、 "user_id"、 "updated_at"、 "post_id"というカラムがあります。投稿テーブルには 'id'、 'title'、 'body'があります。私は両方のテーブルをリンクする関係について知っています。私がしたいのは、両方のテーブルから 'updated_at'によって注文された各投稿を表示することだけです。クエリビルダと雄弁な方法の両方で助けてください。 Thankularavel5の複数のテーブルからデータを取得する

答えて

0

コードがテストされていませんが、あなたはこれを試すことができます。

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

基本的に何をしようとしていますか? – root

+0

sharedpostテーブルのupdated_atカラムに従って、すべての投稿を並べ替えます。 – smartrahat

+0

はい私はそれが私がチェックするように働いていると思う – root

0

多分モデルのアップデートの多くには存在しない場合は少し異なるアプローチ?私は読み取りが高速化する必要がありますと仮定し、この方法は、次にEvents更新フィールドを使用して、新しい移行とadding

$table->timestamp('last_updated'); 

を作成することにより、

がテーブルに別のフィールドを追加します(私は間違ってここにいる場合誰かが私を修正してください) PostまたはSharedPostAppServiceProviderにこれを追加することによって更新されるたび:

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

を私はしかしこれがうまくいくかどうかわからないんだけど、あなたが返される場合は、それをいただければ幸いですフィードバックは私が瞬間に自分自身を試して怠惰だ:)。

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

か、AppServiceProviderでコードをしたくない場合は、オブザーバーをチェックアウトすることができます:最悪のシナリオでは、あなたのような方法を変更する必要があります。それを使用していないが、それは簡単だと思われる。

その後、あなたは可能性があり、単純にPost::orderBy('last_updated')->get();

この方法で、あなたのデータベースに1つのまたは2以上の入力を持つことになりますが、私は(と私が間違っている場合は、みんなが私を修正してください)get()がより速くなるべきだと思います。私はMySQLの専門家とはまったく離れていることに留意してください。

Redisを使用してこのデータをキャッシュに保存すると、さらに高速化できます。

関連する問題