【问题标题】:Add items to query result - Laravel将项目添加到查询结果 - Laravel
【发布时间】:2016-04-04 08:21:56
【问题描述】:

我正在慢慢地将我的 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();

【问题讨论】:

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


    【解决方案1】:

    你可以这样做

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

    $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]);
    

    【讨论】:

    • 哦,哇,我已经使用 Laravel 工作了几年,我完全错过了 $appends 的存在。谢谢!这将非常有用。
    • @JoelHinz 很高兴我能学到一些东西 :) 我也一直在学习并发现 Laravel 的新功能 :)
    • 编辑部分加一个!
    猜你喜欢
    • 2020-10-18
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多