添加项目到查询结果 - Laravel

时间:2015-12-30 11:00:55

标签: json laravel laravel-5 eloquent query-builder

我正在慢慢地将我的API移到Laravel并开始使用Query Builder

我试图实现这个目标:

$data = array();

$query = "SELECT * FROM blog_posts WHERE post_type = 3 AND post_status = 1  ORDER BY id DESC";
$result = mysqli_query($cms_connection, $query);
if($result) {
    while($row = mysqli_fetch_assoc($result)) {
        $row['post_seo'] = seoUrl($row['post_title']);
        $data['data'][] = $row;
    }
    $data['success'] = true;
    $response = json_encode($data);
}

我的问题不一定是获取查询,但您可以看到我使用查询结果然后将其注入最终的array

基本上,我提取行,转换所提取的一些属性,然后将新创建的属性注入到生成的数组中。

这是我到目前为止所做的:

$posts = DB::table('blog_posts')
    -where(['post_type' => 1, 'post_status' => 1)
    ->orderBy('id', 'desc')
    ->take(5)->get();

1 个答案:

答案 0 :(得分:7)

你可以这样做

//获取您的数据(您的部分代码)

$posts = DB::table('blog_posts')
-where(['post_type' => 1, 'post_status' => 1])
->orderBy('id', 'desc')
->take(5)->get();

//添加post_seo

foreach ($posts as $post) {
   $post->post_seo = seoUrl($post->post_title);
}

//设置结果数组

$data['data'] = $posts;
$data['success'] = true;

//回复

$response = response()->json($data);

//或者如果你想返回它

return response()->json($data);

修改

使用Eloquent,你也可以做得更好一些。如果你有这样的模型(你需要添加有效的命名空间和use语句)

class BlogModel extends Model 
{
   protected $table = 'blog_posts';
   protected $appends = ['post_seo'];

   public function getPostSeoAttribute($value)
   {
       return seoUrl($this->post_title);
   } 
}

(添加post_seo属性的访问者,并在转换为数组时将post_seo添加到结果中

您现在可以这样做(语法比前面的例子更短):

//获取您的数据

$posts = BlogPost::where('post_type',1)
->where('post_status',1)
->orderBy('id', 'desc')
->take(5)->get();

//回复

$response = response()->json(['data' => $posts, 'success' => true]);