2017-02-12 120 views
3

我已經在Laravel中設置了我的主應用程序,併爲blog(CRUDE)操作設置了WordPress。安裝WordPress內public文件夾和配置數據庫設置第2數據庫在config/database.php Laravel。從laravel查詢wordpress數據庫

我遇到的麻煩是如何在第二分貝(WordPress)中查詢。我想在我的Laravel應用程序的着陸頁中顯示最新的3篇博客文章。

主要困惑是由於一個帖子在db(WordPress)中有兩行,屬性爲post_status,值爲published,第一行爲inherit,第二行爲inherit。如果精選圖像設置爲博客文章,則爲3行。如果有人能從這個問題中解脫出來,我會非常有幫助。

+1

爲什麼不使用REST API請求的3個帖子? (wpdomain/wp-json/wp/v2/posts) –

+0

是否所有的文章都有精選圖片? –

回答

0

修訂版V3

第一件事,第一:你看到inherit是因爲該職位已 被修改或添加附件。所以你應該選擇 的帖子,其中publish的狀態。

MySQL查詢得到3最新帖子是:

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; 


假設你已經建立了郵政和Postmeta模型就像是在 this tutorial提及。我們必須先得到所有的帖子,然後我們必須得到附件 src鏈接到該帖子。

添加此功能在您的博客帖子型號

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

替換此getPosts()方法在博文型號

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

而在你的控制器,你可以像

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); 
} 

要顯示訪問刀片中的帖子: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 

希望它能幫助!

參考:Accessing WordPress Post through Laravel

+0

我還沒有爲wordpress的數據庫表做任何模型。我需要爲他們製作模型嗎?如果我應該在他們之間建立什麼樣的關係? –

+0

我在谷歌周圍尋找並找到了一種方法來製作wordpress表格之間的模型和關係。當我查詢'$ posts = BlogPost :: orderBy('post_date','desc') - > limit(3) - > get();'我得到3行的屬性爲'post_status'的表' ('post_status','=','published') - > orderBy('post_date','desc') - > limit(3) - >獲得(); ' –

+0

@TanjaForsberg:不,它不是強制性的Modal,但我個人偏好擁有它。並且在查詢中有2個問題,我已經更新了我的答案將正確的雄辯查詢,請看一看。 –

1

從Laravel docs

使用多個數據庫連接

當使用多個連接,您可以訪問通過 的連接方法在DB門面每個連接。傳遞給 連接方法的名稱應該對應於您的配置/數據庫中列出的連接 之一。PHP配置文件:

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