将项目添加到查询结果 - Laravel
Add items to query result - Laravel
我正在慢慢地将我的 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();
你可以这样做
// 获取您的数据(您的代码部分)
$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 它只是
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]);
我正在慢慢地将我的 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();
你可以这样做
// 获取您的数据(您的代码部分)
$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 它只是
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]);