Rumah > pembangunan bahagian belakang > tutorial php > Laravel学习-数据库操作和查询构造器的示例代码分享

Laravel学习-数据库操作和查询构造器的示例代码分享

黄舟
Lepaskan: 2023-03-06 19:36:02
asal
1566 orang telah melayarinya


最近小编在学习号称世界最牛框架–Laravel。其实学习框架也就是学习框架的思想! 我想在我的博客中记录我在laravel学习中的一些心得,欢迎大家关注我的其他Github博客和简书,互相交流!

版本:Laravel 5.2
 数据库:mysql 5.7
 php:php7.1

数据库操作查询构造器

在Laravel中执行数据库操作有两种方式,一种是使用\DB外观对象的静态方法直接执行sql查询,另外一种是使用Model类的静态方法(实际上也是Facade的实现,使用静态访问方式访问Model的方法,内部采用了callStatic魔术方法代理了对成员方法的访问。

查询操作

使用sql语句执行select查询操作#

$results = DB::select('select * from users where id = ?', [1]);foreach ($results as $res) {    echo $res->name;
}
Salin selepas log masuk

返回结果为数组,数组中每一个值为一个StdClass对象。
也可以使用命名绑定,推荐使用这种方式,更加清晰一些

$results = DB::select('select * from users where id = :id', ['id' => 1]);
Salin selepas log masuk

从数据表中取得所有的数据列#

$users = DB::table('users')->get();

foreach ($users as $user)
{
    var_dump($user->name);
}
Salin selepas log masuk

从表中查询单行/列

使用first方法返回单行数据,该方法返回的是一个stdClass对象

$user = DB::table('users')->where('name', 'John')->first();
echo $user->name;
Salin selepas log masuk

如果只需要一列的值,则可以使用value方法直接获取单列的值

$email = DB::table('users')->where('name', 'John')->value('email');
Salin selepas log masuk

从数据表中分块查找数据列

该方法用于数据表中有大量的数据的操作,每次从结果集中取出一部分,使用闭包函数进行处理,然后再处理下一部分,该命令一般用于Artisan命令行程序中处理大量数据。

DB::table('users')->chunk(100, function($users){
    foreach ($users as $user)
    {        //
    }
});
Salin selepas log masuk

在闭包函数中,如果返回false,则会停止后续的处理。

从数据表中查询某一列的列表#

比如我们希望查询出角色表中所有的title字段值

$titles = DB::table('roles')->pluck('title');foreach ($titles as $title) {    echo $title;
}
Salin selepas log masuk

这里的pluck函数有两个参数

Collection pluck( string $column, string|null $key = null)
Salin selepas log masuk

第一个参数为要查询的列,第二个参数是每一列的key

$roles = DB::table('roles')->pluck('title', 'name');foreach ($roles as $name => $title) {    echo $title;
}
Salin selepas log masuk

聚合函数

查询构造器也提供了一些聚集函数如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');
Salin selepas log masuk

指定select查询条件

查询指定的列#

$users = DB::table('users')->select('name', 'email as user_email')->get();
Salin selepas log masuk

如果已经指定了select,但是又希望再次添加一些字段,使用它addSelect方法

$query = DB::table('users')->select('name');$users = $query->addSelect('age')->get();
Salin selepas log masuk

查询不同的结果distinct#

$users = DB::table('users')->distinct()->get();
Salin selepas log masuk

使用原生表达式#

使用DB::raw方法可以向查询中注入需要的sql片段,但是非常不推荐使用该方法,用不好会 产生sql注入

$users = DB::table('users')
      ->select(DB::raw('count(*) as user_count, status'))
      ->where(&#39;status&#39;, &#39;<>&#39;, 1)
      ->groupBy(&#39;status&#39;)
      ->get();
Salin selepas log masuk

Join操作

内连接 Inner Join#

使用join执行内连接操作,该函数第一个参数为要连接的表名,其它参数指定了连接约束

$users = DB::table(&#39;users&#39;)
  ->join(&#39;contacts&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)
  ->join(&#39;orders&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;orders.user_id&#39;)
  ->select(&#39;users.*&#39;, &#39;contacts.phone&#39;, &#39;orders.price&#39;)
  ->get();
Salin selepas log masuk

左连接 Left Join#
使用leftJoin方法执行左连接操作,参数和join一样$users =

DB::table(&#39;users&#39;)
  ->leftJoin(&#39;posts&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;posts.user_id&#39;)
  ->get();
Salin selepas log masuk

高级Join方法#

如果join方法的约束条件比较复杂,可以使用闭包函数的方式指定

<p style="margin-top: 7px;">DB::table(&#39;users&#39;)<br/>   ->join(&#39;contacts&#39;, function ($join) {<br/>       $join->on(&#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)->orOn(...);<br/>   })<br/>   ->get();<br/></p>
Salin selepas log masuk

如果join约束中要使用列值与指定数组比较,则可以使用where和OrWhere方法

DB::table(&#39;users&#39;)  
->join(&#39;contacts&#39;, function ($join) {       
$join->on(&#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)            
->where(&#39;contacts.user_id&#39;, &#39;>&#39;, 5);
   })   ->get();
Salin selepas log masuk

Union操作

要使用union操作,可以先创建一个query,然后再使用union方法去绑定第二个query

$first = DB::table(&#39;users&#39;)
            ->whereNull(&#39;first_name&#39;);
$users = DB::table(&#39;users&#39;)
            ->whereNull(&#39;last_name&#39;)
            ->union($first)
            ->get();
Salin selepas log masuk

同样,unionAll方法也是可以使用的,参数与union相同。

Where查询条件

简单的wehere条件#

使用where方法为查询增加where条件,该函数一般需要三个参数:列名,操作符(任何数据库支持的操作符都可以),列值。

$users = DB::table(&#39;users&#39;)->where(&#39;votes&#39;, &#39;=&#39;, 100)->get();
$users = DB::table(&#39;users&#39;)->where(&#39;votes&#39;, 100)->get();
Salin selepas log masuk

Atas ialah kandungan terperinci Laravel学习-数据库操作和查询构造器的示例代码分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan