欢迎各位兄弟 发布技术文章
这里的技术是共享的
下面是 lists
public function create(){
$tags = \App\Tag::lists('name');
return view('articles.create', compact('tags'));
}
>>> \App\Tag::lists('name');
=> [
"PHP",
"Java",
"C##",
"Python",
"Go"
]
默认情况下,使用 lists('name')
所得到的 key
值是以 0
开始的,而我们需要的是 key
值就是 value
的值,所以需要按这么那种写法:
>>> \App\Tag::lists('name', 'name');
=> [
"PHP" => "PHP",
"Java" => "Java",
"C##" => "C##",
"Python" => "Python",
"Go" => "Go"
]
public function edit(Article $article){
$tags = \App\Tag::lists('name', 'id');
return view('articles.edit', compact('article', 'tags'));
}
>>> $article->title = 'My updated First Article';
=> "My updated First Article"
>>> $article->save();
=> true
>>> App\Article::all()->toArray();
=> [
[
"id" => 1,
"title" => "My updated First Article",
"body" => "Lorem ipsum",
"created_at" => "2015-05-14 13:26:28",
"updated_at" => "2015-05-14 13:31:46",
"published_at" => "2015-05-14 13:26:16",
"excerpt" => null
]
]
$sum_click_num = Auth::user()->nets()->sum('total_click_num'); $all_nets = Auth::user()->nets->all();//列出所有列名
$all_nets = Auth::user()->nets()->orderby('created_at','desc')->get();/列出所有列名 以时间倒序排
$sum_click_num = Auth::user()->nets()->lists('列名');
$sum_click_num = Auth::user()->nets()->lists('列名1','列名2','列名3');// 好像是键值对 可以用逗号分割多个列名
$sum_click_num = Auth::user()->nets->lists('列名');
$sum_click_num = Auth::user()->nets->lists('列名1','列名2','列名3');//好像是键值对 可以用逗号分割多个列名
$sum_click_num = Auth::user()->nets()->lists('*');//这个不对
如果你需要处理成千上百条数据库记录,可以考虑使用chunk
方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的Artisan命令的时候非常有用。比如,我们可以将处理全部users表数据处理成一次处理100记录的小组块:
DB::table('users')->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
你可以通过从闭包函数中返回false来中止组块的运行:
DB::table('users')->chunk(100, function($users) {
// 处理结果集...
return false;
});
$user = DB::table('users')->where('name', 'John')->first(); echo $user->name;
$users = DB::table('users')->get();
return view('user.index', ['users' => $users]);
队列构建器还提供了很多聚合方法,比如count
, max
, min
, avg
, 和 sum
,你可以在构造查询之后调用这些方法:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
当然,你可以联合其它查询字句和聚合函数来构建查询:
$price = DB::table('orders')
->where('finalized', 1)
->avg('price');
当然,我们并不总是想要获取数据表的所有列,使用select
方法,你可以为查询指定自定义的select
子句:
$users = DB::table('users')->select('name', 'email as user_email')->get();
distinct
方法允许你强制查询返回不重复的结果集:
$users = DB::table('users')->distinct()->get();
如果你已经有了一个查询构建器实例并且希望添加一个查询列到已存在的select
子句,可以使用addSelect
方法:
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
当然,我们并不总是想要获取数据表的所有列,使用select
方法,你可以为查询指定自定义的select
子句:
$users = DB::table('users')->select('name', 'email as user_email')->get();
distinct
方法允许你强制查询返回不重复的结果集:
$users = DB::table('users')->distinct()->get();
如果你已经有了一个查询构建器实例并且希望添加一个查询列到已存在的select
子句,可以使用addSelect
方法:
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
有时候你希望在查询中使用原生表达式,这些表达式将会以字符串的形式注入到查询中,所以要格外小心避免被SQL注入。想要创建一个原生表达式,可以使用 DB::raw
方法:
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
查询构建器还可以用于编写基本的SQL“内连接”,你可以使用查询构建器实例上的join
方法,传递给join
方法的第一次参数是你需要连接到的表名,剩余的其它参数则是为连接指定的列约束,当然,正如你所看到的,你可以在单个查询中连接多张表:
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
如果你是想要执行“左连接”而不是“内连接”,可以使用leftJoin
方法。该方法和join
方法的使用方法一样:
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
你还可以指定更多的高级连接子句,传递一个闭包到join
方法作为该方法的第2个参数,该闭包将会返回允许你指定join
子句约束的JoinClause
对象:
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
如果你想要在连接中使用“where”风格的子句,可以在查询中使用where
和orWhere
方法。这些方法将会将列和值进行比较而不是列和列进行比较:
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);
})
->get();
查询构建器还提供了一条“联合”两个查询的快捷方式,比如,你要创建一个独立的查询,然后使用union
方法将其和第二个查询进行联合:
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();
unionAll
方法也是有效的,并且和union
有同样的使用方法。
$posts = Post::where('views','>',0)->paginate(3);
$posts = Post::paginate(3);
$posts = Post::simplePaginate(3);
$posts = DB::table('posts')->simplePaginate(3);
lists 中使用 orderby where 等
$roles = Role::orderby('role_id','desc')->lists('label', 'role_id');
//也可以 $roles = Role::orderby('role_id')->lists('label', 'role_id'); //默认升序
$roles = Role::where('role_id','>',Auth::user()->role->role_id)->lists('label', 'role_id') 也可以 $roles = Role::where('role_id',Auth::user()->role->role_id)->lists('label', 'role_id') //默认相等