Laravel 中大量数据查询有什么技巧吗

Laravel 中大量数据查询有什么技巧吗,第1张

->get(array('posts.id', 'posts.support', 'posts.against', 'users.username', 'posts.post_author', 'posts.post_title', 'posts.post_body'))

foreach($posts as $p){

$data[] = array(

'id' =>$p ->id,

'support' =>$p ->support,

'against' =>$p ->against,

'username'=>$p ->username,

'post_author' =>$p ->post_author,

'post_title' =>$p ->post_title,

'post_body' =>$p ->post_body

)

}

$res = View::make('home.index')

->with('posts', $data)

Cache::forever('staticPageCache_home', $res)

}

// 返回缓存的数据

return Cache::get('staticPageCache_home')

}

}

这里我用到了三个api

1). Cache::has ,这个判断是说如果当前不存在 staticPageCache_home 这个名字的缓存, 就立即去取数据

2). Cache::forever, 这个从用例文档里面可知是"永久缓存"的意思, 因为我一般都是很勤劳的,如果发表了博文,自己再去后台立即刷新一下缓存就好了, 所以不需要设置过期啊失效时间之类的, 当然这个是要按各自的具体需求来的

3). Cache::get , 这句是从缓存里面取出 staticPageCache_home 这个名字的缓存, 然后作为响应内容返回

嗯, 就这么简单, 呵呵, 一个基本的缓存功能就完成了, laravel的确是不错地!

3. 为后台添加刷新缓存功能

还是贴代码吧, 不过也很简单:

// 刷新首页缓存(暂时只支持首页)

public function get_refreshcache() {

/*

@var $GID admin组id

*/

$GID = 1

if ( Auth::user() ->gid === 1 ) {

$data = array()

$posts = Post::with('user')

->join('users', 'users.id', '=', 'posts.post_author')

->order_by('posts.created_at', 'desc')

->get(array('posts.id', 'posts.support', 'posts.against', 'users.username', 'posts.post_author', 'posts.post_title', 'posts.post_body'))

foreach($posts as $p){

$data[] = array(

'id' =>$p ->id,

'support' =>$p ->support,

'against' =>$p ->against,

'username'=>$p ->username,

'post_author' =>$p ->post_author,

'post_title' =>$p ->post_title,

'post_body' =>$p ->post_body

)

}

$res = View::make('home.index')

->with('posts', $data)

Cache::forever('staticPageCache_home', $res)

return '刷新首页缓存成功!'

}

return '对不起,只有管理员组才可进行此 *** 作!'

}

我给后台添加了一个项目, 对应这个方法, 方法内容和首页的大同小异, 取数据, 然后Cache::forever 刷新一下缓存,就这么简单,当然了,上面的Auth::user() 判断是个简单的判断,只有管理员组才能进行刷新 *** 作,呵呵

find -->返回 object or empty

ex:

$p = Project::find($id)

if(empty($p)) {

dd('project is empty')

}

get -->返回object , 透过count 方法判断

ex:

$p = Project::where('user_id', '=', $userid)->get()

if($p->count() == 0) {

dd('project is empty')

}

Laravel框架中的DB类让我们可以方便的进行数据库 *** 作,比如常见的query查询:

DB::query('SELECT * FROM users')

Larvel还提供了类似CI框架中Active Record的Fluent Query Builder : DB::table('user')->where('id','=','1')->get()

虽然从 *** 作上和普通查询相差不大,但是需要注意到是Laravel的查询结果和原生查询不同。

简单建立一个contents表测试下,表里有content字段,我们查询一下:

$content = DB::table('contents')->where('id','=','1')->get()

最后打印一下$content变量看看有什么不同:

array(1)

{

[0]=>object(stdClass)#31 (1) {

["content"]=>string(24) "这是一个测试~~" }

}

从上面可以知道查询的结果是一个包含对象的数组,因此我们要取得content值就必须先迭代:

foreach($contents as $content)

{ echo $content->content

}

总体来说Laravel的数据库 *** 作很容易上手。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10062667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存