2017-02-12 2 views
3

У меня настроено основное приложение в Laravel и настроено приложение WordPress для блога (CRUDE). Установленный WordPress внутри public папка и настроенные параметры базы данных для 2-й базы данных в config/database.php в Laravel.Запрос в wordpress db из laravel

Проблема, с которой я столкнулся, - это как запросить во 2-й db (WordPress). Я хочу показать последние 3 сообщения в блоге с их изображением на целевой странице моего приложения Laravel.

Основная путаница вызвана один пост имеет две строки в БД (WordPress) с атрибутом post_status со значениями published для первой строки и inherit для второго ряда. И 3 строки, если выбранное изображение установлено в сообщение в блоге. Я был бы очень полезен, если бы кто-нибудь мог пройти через меня из этой проблемы.

+1

Почему бы не использовать REST API, чтобы запросить эти 3 сообщения? (wpdomain/wp-json/wp/v2/posts) –

+0

У всех ваших сообщений есть изображение? –

ответ

0

ОБНОВЛЕНО v3

Первое первый: вы видите inherit потому, что сообщение был пересмотрен или прикрепление добавляется. Таким образом, вы должны выбрать сообщение post , которое имеет статус 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 на этот пост.

Добавить эту функцию в BlogPost модели

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

заменить этот getPosts() метод в BlogPost модели

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

Показать сообщение в лезвии: имя_проекта/ресо 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

Я еще не создал модель для таблиц db wordpress. Нужно ли мне создавать для них модель? Если тогда какое отношение я должен установить между ними? –

+0

Я охотился вокруг google и нашел способ сделать модель и соотношение между таблицами wordpress. Когда я запрашиваю '$ posts = BlogPost :: orderBy ('post_date', 'desc') -> limit (3) -> get();' я получаю 3 строки таблицы с атрибутом 'post_status' как' publish' и 'inherit'. Но получите пустую коллекцию с запросом' $ posts = BlogPost :: где ('post_status', '=', 'published') -> orderBy ('post_date', 'desc') -> limit (3) -> получить(); ' –

+0

@TanjaForsberg: Нет, это необязательно иметь модальный, но это мое личное предпочтение иметь его. и у вас есть 2 вопроса в вашем запросе, я обновил свой ответ, верный красноречивый запрос, пожалуйста, посмотрите. –

1

От Laravel docs.

Использование несколько соединений баз данных

При использовании нескольких соединений, вы можете получить доступ к каждому соединению через метод соединения на фасаде DB. Имя, переданное в метод подключения , должно соответствовать одному из подключений, указанному в вашей конфигурации/базе данных.PHP файл конфигурации:

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