2017-02-12 6 views
3

私はLaravelにメインアプリケーションをセットアップし、ブログ(CRUDE)操作用にWordPressをセットアップしました。 WordPressをpublicフォルダにインストールし、Laravelのconfig/database.phpに2番目のデータベースのデータベース設定を構成しました。laravelからwordpress dbへのクエリ

私が抱えている問題は、どのように2番目のdb(WordPress)でクエリを実行するかです。私は自分のLaravelアプリのランディングページに、注目の画像を含む最新の3つのブログ投稿を表示したいと思います。

主な混乱は、最初の行がpublished、2行目がinheritの値を持つ属性がpost_statusのdb(WordPress)に2つの行があることが原因です。注目画像がブログ投稿に設定されている場合は3行。私は誰もがこの問題から私を歩いていくことができるなら、私は非常に役に立ちます。最初

+1

? (wpdomain/wp-json/wp/v2/posts) –

+0

すべての投稿に画像がありますか? –

答えて

0

UPDATED v3の

まず最初:あなたはinheritを見ているという記事が 改訂されたか、または添付ファイルが追加されるためです。だからpublishステータスの投稿 投稿を選択する必要があります。 3最新のポストを得るために

MySQLのクエリは次のとおりです。

SELECT 
    posts.ID AS post_id, 
    posts.post_title, 
    posts.post_date 
FROM 
    whrg_posts AS posts 
WHERE 
    posts.post_status = 'publish' 
AND posts.post_type = 'post' 
ORDER BY 
    posts.post_date DESC 
LIMIT 3; 


それは this tutorialに記載されているようにあなたがポストとPostmetaのためのモデルを設定していると仮定します。私たちはまずすべての投稿を取得する必要がありますし、我々はその投稿への添付ファイル srcを取得する必要があります。

Public function getPosts() 
{ 
    return BlogPost::with('postmetas') 
      ->status() 
      ->type() 
      ->orderBy('post_date', 'DESC') 
      ->limit(3) 
      ->get(); 
} 

ブログ投稿のモデルでは、このgetPosts()方法を交換し、あなたのコントローラにあなたがショーに

public function anyPostList() 
{ 
    $postImages = []; //array to hold the featured image URL in a key value pair 
    $BlogPost = new BlogPost(); 
    $posts = $BlogPost->getPosts(); 
    foreach ($posts as $post) 
    { 
     if (!empty($post->postmetas)) 
     { 
      foreach ($post->postmetas as $postmeta) 
      { 
       //if _thumbnail_id exists then get its guid for src 
       if ($postmeta->meta_key == '_thumbnail_id' && !empty($postmeta->meta_value)){ 
        $thumbnail_id = $postmeta->meta_value; 
        $attachment = $BlogPost->getPostById($thumbnail_id); 
        if(!empty($attachment->guid)) 
         $postImages[$post->ID] = $attachment->guid; 
       } 

      } 
     } 
    } 
    $data = [ 
     'posts' => $posts, 
     'postImages' => $postImages 
    ]; 
    return view('test.post', $data); 
} 

のようにアクセスすることができ、あなたのブログ投稿モデル

Public function getPostById($post_id) 
{ 
    return BlogPost::where('ID', $post_id) 
      ->first(); 
} 

を、この機能を追加ブレードのポスト:project_name/reso urces /ビュー/テスト/ post.blade.php

@foreach($posts as $post) 
    <h1>{{ $post->post_title }}</h1> 
    <span>Published on : {{ $post->post_date }}</span> 
    @if(isset($postImages[$post->ID])) 
     <img src="{{$postImages[$post->ID]}}" width="200"/> 
    @endif 
    <div> 
     {{ $post->post_content }} 
    </div> 
@endforeach 

はそれが役に立てば幸い!

参考:Laravel docsからAccessing WordPress Post through Laravel

+0

私はまだWordPressのdbテーブル用のモデルを作っていません。私は彼らのためのモデルを作る必要がありますか?もし私はそれらの間にどのような関係を確立すべきですか? –

+0

私はGoogleの周りを狩り、モデルとWordPressのテーブル間の関係を作る方法を見つけた。私が '$ posts = BlogPost :: orderBy( '​​post_date'、 'desc') - > limit(3) - > get();'を検索すると、 'post_status'という属性を持つテーブルが3行あり、' published' ( 'post_status'、 '='、 'published') - > orderBy( '​​post_date'、 'desc') - > limit(3)というクエリで空のコレクションを取得します。 - > get(); ' –

+0

@TanjaForsberg:いいえ、Modalを持つことは必須ではありませんが、それは私の個人的な好みです。あなたの質問に2つの問題がある、私は私の答えを更新した正しい雄弁なクエリは、見てください。 –

1

使用して、複数のデータベース接続

複数の接続を使用する場合は、あなたがDBのファサードに 接続方法を経由して各接続にアクセスすることができます。 接続方法に渡される名前は、設定/データベースの に記載されている接続の1つに対応する必要があります。PHPの設定ファイル:これら3つのポストを要求するためにREST APIを使用しないのはなぜ

$users = DB::connection('foo')->select(...);

関連する問題