ホームページ >php教程 >PHP开发 >LaravelフレームワークデータベースのCURD操作とコヒーレント操作の概要

LaravelフレームワークデータベースのCURD操作とコヒーレント操作の概要

高洛峰
高洛峰オリジナル
2016-12-27 10:21:451380ブラウズ

1. 選択

テーブル内のすべての行を取得します

$users = DB::table('users')->get();
foreach ($users as $user)
{
var_dump($user->name);
}

テーブルから単一の行を取得します

$user = DB::table('users')->where('name', 'John')->first();
var_dump($user->name);

単一の列の行を取得します

$name = DB::table('users')->where('name', 'John')->pluck('name');

列の値のリストを取得します

$roles = DB::table('roles')->lists('title');

このメソッドは次の役割を返します配列ヘッダー。カスタム キー列を指定して配列を返すこともできます

$roles = DB::table('roles')->lists('title', 'name');

Select 句を指定する

$users = DB::table('users')->select('name', 'email')->get();
 $users = DB::table('users')->distinct()->get();
 $users = DB::table('users')->select('name as user_name')->get();

Select 句を既存のクエリに追加する $query = DB::table('users')->select ('name') ;

$users = $query->addSelect('age')->get();

where

$users = DB::table('users')->where('votes', '>', 100)->get();

OR

$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();

間の範囲

$users = DB::table('users')->whereBetween('votes', array(1, 100))->get();

中間でない範囲

$users = DB::table('users')->whereNotBetween('votes', array(1, 100))->get();

配列の範囲

$users = DB::table('users')->whereIn('id', array(1, 2, 3))->get();
$users = DB::table('users')->whereNotIn('id', array(1, 2, 3))->get();

Where Nullを使用して値が設定されていないレコードを検索する

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

Order By、Group By、および2. 接続

結合

クエリ ビルダーを使用して、接続ステートメントを作成することもできます。次の例を見てください:

基本結合ステートメント

$users = DB::table('users')->orderBy('name', 'desc')->groupBy('count')->having('count', '>', 100)->get();

左結合ステートメント

$users = DB::table('users')->skip(10)->take(5)->get();

3. グループ化

場合によっては、「exists」やネストされたパラメーターのグループ化など、より高度な where 句の作成が必要になる場合があります。 Laravel クエリ ビルダーはこれらを処理できます:

DB::table('users')
  ->join('contacts', 'users.id', '=', 'contacts.user_id')
  ->join('orders', 'users.id', '=', 'orders.user_id')
  ->select('users.id', 'contacts.phone', 'orders.price')
  ->get();

上記のクエリは次の SQL を生成します:

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

上記のクエリは次の SQL を生成します:

DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where(&#39;title&#39;, &#39;<>&#39;, &#39;Admin&#39;);
})
->get();

IV. 集計

クエリ ビルダーは、次のようなさまざまな集計メソッドも提供します。統計、最大、最小、平均、合計。

集計メソッドの使用

  select * from users where name = &#39;John&#39; or (votes > 100 and title 
<> &#39;Admin&#39;)
  Exists Statements
  DB::table(&#39;users&#39;)
  ->whereExists(function($query)
  {
  $query->select(DB::raw(1))
  ->from(&#39;orders&#39;)
  ->whereRaw(&#39;orders.user_id = users.id&#39;);
  })
  ->get();

生の式

生の式クエリを使用する必要がある場合があります。これらの式はクエリ文字列に挿入されるため、SQL インジェクション ポイントを作成しないように注意してください。生の式を作成するには、DB:rawmethod:

生の式の使用

select * from userswhere exists (
select 1 from orders where orders.user_id = users.id
)

を使用して、列

$users = DB::table(&#39;users&#39;)->count();
$price = DB::table(&#39;orders&#39;)->max(&#39;price&#39;);
$price = DB::table(&#39;orders&#39;)->min(&#39;price&#39;);
$price = DB::table(&#39;orders&#39;)->avg(&#39;price&#39;);
$total = DB::table(&#39;users&#39;)->sum(&#39;votes&#39;);

更新する追加の列を指定することもできます:

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

Inserts

テーブルにレコードを挿入します

DB::table(&#39;users&#39;)->increment(&#39;votes&#39;);
DB::table(&#39;users&#39;)->increment(&#39;votes&#39;, 5);
DB::table(&#39;users&#39;)->decrement(&#39;votes&#39;);
DB::table(&#39;users&#39;)->decrement(&#39;votes&#39;, 5);

自動インクリメントIDを持つテーブルにレコードを挿入します

テーブルに自動インクリメントIDフィールドがある場合は、使用しますinsertGetId を使用してレコードを挿入し、ID を取得します :

 DB::table(&#39;users&#39;)->increment(&#39;votes&#39;, 1, array(&#39;name&#39; => &#39;John&#39;));

注: PostgreSQL の insertGetId メソッドを使用する場合、自動インクリメント列の名前は「id」であることが想定されます。

テーブルに複数のレコードを挿入

DB::table(&#39;users&#39;)->insert(
array(&#39;email&#39; => &#39;john@example.com&#39;, &#39;votes&#39; => 0)
);

4. 更新

テーブル内のレコードを更新

$id = DB::table(&#39;users&#39;)->insertGetId(
array(&#39;email&#39; => &#39;john@example.com&#39;, &#39;votes&#39; => 0)
);

5. 削除

テーブル内のレコードを削除

DB::table(&#39;users&#39;)->insert(array(
array(&#39;email&#39; => &#39;taylor@example.com&#39;, &#39;votes&#39; => 0),
array(&#39;email&#39; => &#39;dayle@example.com&#39;, &#39;votes&#39; => 0),
));

テーブル内のすべてのレコードを削除

DB::table(&#39;users&#39;)
->where(&#39;id&#39;, 1)
->update(array(&#39;votes&#39; => 1));

DB::table(&#39;users&#39;)->where(&#39;votes&#39;, &#39;<&#39;, 100)->delete();

6. 結合

クエリ ビルダーは、2 つのクエリを「結合」する簡単な方法も提供します。

DB::table(&#39;users&#39;)->delete();

同じメソッド シグネチャを持つ UnionAll メソッドも使用できます。

悲観的ロック

クエリビルダーには、SELECT ステートメントを支援するいくつかの「悲観的ロック」機能が含まれています。 SELECT ステートメント「共有ロック」を実行するには、sharedLock メソッドを使用してクエリを実行できます:

DB::table(&#39;users&#39;)->truncate();

SELECT ステートメントの「ロック」を更新するには、lockForUpdate メソッドを使用してクエリを実行できます:

  $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();

7. クエリをキャッシュします。

ニーモニックを使用してクエリ結果を簡単にキャッシュできます:

DB::table(&#39;users&#39;)->where(&#39;votes&#39;, &#39;>&#39;, 
100)->sharedLock()->get();

この例では、クエリの結果は 10 分間キャッシュされます。クエリ結果がキャッシュされる場合、クエリ結果はデー​​タベースに対して実行されず、結果はアプリケーションで指定されたデフォルトのキャッシュ ドライバーからロードされます。キャッシュをサポートするドライバーを使用している場合は、キャッシュにタグを追加することもできます:

 DB::table(&#39;users&#39;)->where(&#39;votes&#39;, &#39;>&#39;, 100)->lockForUpdate()->get();

Laravel フレームワーク データベース CURD 操作およびコヒーレント操作の概要に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。