从laravel查询wordpress db

时间:2017-02-12 18:23:22

标签: php mysql wordpress laravel laravel-5.3

我在Laravel中设置了我的主应用程序,并为博客(CRUDE)操作设置了WordPress。在public文件夹中安装了WordPress,并为Laravel中的config/database.php中的第二个数据库配置了数据库设置。

我遇到的麻烦是如何在第二个数据库(WordPress)中查询。我想在我的Laravel应用程序的登录页面中显示最新的3篇博文及其特色图片。

主要的混淆是由于一个帖子在db(WordPress)中有两行,属性为post_status,第一行为published,第二行为inherit。如果特色图像设置为博客文章3行。如果有人能够解决这个问题,我会非常乐于助人。

2 个答案:

答案 0 :(得分:1)

更新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;

<小时/> 假设你已经设置了Post和Postmeta模型,就像在this tutorial中提到的那样。我们必须首先获得所有帖子,然后我们必须获得该帖子的附件src链接。

在BlogPost模型中添加此功能

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

替换BlogPost模型中的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 / resources / views / test / 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

答案 1 :(得分:1)

来自Laravel docs

  

使用多个数据库连接

     

使用多个连接时,您可以通过访问每个连接   数据库外观上的连接方法。这个名字传给了   连接方法应对应列出的其中一个连接   在config / database.php配置文件中:

     

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