欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

list lists 列出 数据库中某个列名 某个列的所有列名 得到 所有的行的所有列 指定列 指定字段信息 单独列名 单个列名 id 键值对 all get first chunk paginate simplePaginate等 有大用

shiping1 的头像
  1. 下面是 lists

  2. public function create(){

  3. $tags = \App\Tag::lists('name');

  4. return view('articles.create', compact('tags'));

  5. }



  1. >>> \App\Tag::lists('name');

  2. => [

  3. "PHP",

  4. "Java",

  5. "C##",

  6. "Python",

  7. "Go"

  8. ]

  9. 默认情况下,使用 lists('name') 所得到的 key 值是以 0 开始的,而我们需要的是 key 值就是 value 的值,所以需要按这么那种写法:

  10. >>> \App\Tag::lists('name', 'name');

  11. => [

  12. "PHP" => "PHP",

  13. "Java" => "Java",

  14. "C##" => "C##",

  15. "Python" => "Python",

  16. "Go" => "Go"

  17. ]

  18.  

  19. public function edit(Article $article){

  20. $tags = \App\Tag::lists('name', 'id');

  21. return view('articles.edit', compact('article', 'tags'));

  22. }



 

下面是 all
  1. >>> $article->title = 'My updated First Article';

  2. => "My updated First Article"

  3. >>> $article->save();

  4. => true

  5. >>> App\Article::all()->toArray();

  6. => [

  7. [

  8. "id" => 1,

  9. "title" => "My updated First Article",

  10. "body" => "Lorem ipsum",

  11. "created_at" => "2015-05-14 13:26:28",

  12. "updated_at" => "2015-05-14 13:31:46",

  13. "published_at" => "2015-05-14 13:26:16",

  14. "excerpt" => null

  15. ]

  16. ]

$sum_browse_sum = Auth::user()->nets()->sum('browse_num');
$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]);



2.5 聚合函数

队列构建器还提供了很多聚合方法,比如countmaxminavg, 和 sum,你可以在构造查询之后调用这些方法:

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');


当然,你可以联合其它查询字句和聚合函数来构建查询:

$price = DB::table('orders')
                ->where('finalized', 1)
                ->avg('price');


3、查询(Select)

3.1 指定查询子句

当然,我们并不总是想要获取数据表的所有列,使用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();


3、查询(Select)

3.1 指定查询子句

当然,我们并不总是想要获取数据表的所有列,使用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();


3.2 原生表达式

有时候你希望在查询中使用原生表达式,这些表达式将会以字符串的形式注入到查询中,所以要格外小心避免被SQL注入。想要创建一个原生表达式,可以使用 DB::raw方法:

$users = DB::table('users')
                     ->select(DB::raw('count(*) as user_count, status'))
                     ->where('status', '<>', 1)
                     ->groupBy('status')
                     ->get();


4、连接(Join)

4.1 内连接(等值连接)

查询构建器还可以用于编写基本的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();


4.2 左连接

如果你是想要执行“左连接”而不是“内连接”,可以使用leftJoin方法。该方法和join方法的使用方法一样:

$users = DB::table('users')
            ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
            ->get();


4.3 高级连接语句

你还可以指定更多的高级连接子句,传递一个闭包到join方法作为该方法的第2个参数,该闭包将会返回允许你指定join子句约束的JoinClause对象:

DB::table('users')
        ->join('contacts', function ($join) {
            $join->on('users.id', '=', 'contacts.user_id')->orOn(...);
        })
        ->get();


如果你想要在连接中使用“where”风格的子句,可以在查询中使用whereorWhere方法。这些方法将会将列和值进行比较而不是列和列进行比较:

DB::table('users')
        ->join('contacts', function ($join) {
            $join->on('users.id', '=', 'contacts.user_id')
                 ->where('contacts.user_id', '>', 5);
        })
        ->get();


5、联合(Union)

查询构建器还提供了一条“联合”两个查询的快捷方式,比如,你要创建一个独立的查询,然后使用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') //默认相等



















普通分类: