hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - php框架 - 正文 君子好学,自强不息!

【PHP开辟框架】Laravel 中Eloquent ORM 相干操纵

2019-11-15php框架搜奇网59°c
A+ A-
定义

操纵

猎取(查询)

猎取鸠合,(查询列表)

返回值是 IlluminateDatabaseEloquentCollection 的一个实例

猎取一切的数据

use App\User;
$users = User::all();

前提猎取列表

$users = User::where('active', 1)
             ->orderBy('name', 'desc')
             ->take(10)
             ->get();

猎取数据列值

$result = User::where('gender', '1')->pluck('name');
 // 返回 ['name1','name2 ']
// 该自定义键必需是该表的别的字段列名,不然会报错
$result = User::where('gender', '1')->pluck('email','name');
// 返回 {"name1":"ed9@qq.com","name2":"ed89@qq.com"}

猎取单个模子,(查询单条数据)

// 经由过程主键猎取模子
$user = User::find(1);
// 猎取婚配查询前提的第一个模子...
$user = User::where('active', 1)->first();
//  返回第一个gender为1的用户的名字
$name = User::where('gender', '1')->value('name');
// 通报主键数组来挪用 find 要领,这将会返回婚配纪录鸠合:
$users = App\Flight::find([1, 2, 3]);
假如没有任何查询效果,IlluminateDatabaseEloquentModelNotFoundException 非常将会被抛出:
$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();

处理效果集

$result = User::where('gender', '1')->chunk(5, function($users) {
            foreach ($users as $user) {
                $name = $user->name;
                echo $name;
            }
}) // 输出名字
// result 为 boolean  
$result = User::where('gender', '1')->chunk(5, function($users) {
            foreach ($users as $user) {
              $name = $user->name;
              if ($name == "dxx5") {
                 echo $name;
                 return false;
              }
           }
}) // 找出某个名字

聚合要领

// 猎取总数
$count = Flight::where('active', 1)->count();
// 猎取最大值
$max = Flight::where('active', 1)->max('price');
//平均值
$max = Flight::where('active', 1)->avg('price');

前提查询

select查询

  // 查询名字和email
    $users = User::select('name','email as user_email')->get();
    // 返回 [{"name":"name1","user_email":"1@qq.com"}]
    // 查询构建器实例,增加一个查询列到已存在的 select 子句
    $user = User::select('name');
    $users = $user->addSelect('gender')->get();

团结

$first = DB::table('users')
            ->whereNull('first_name');
$users = DB::table('users')
            ->whereNull('last_name')
            ->union($first)
            ->get();

注:unionAll 要领也是有用的,而且和 union 有一样的运用体式格局

Where子句

$users = User::where('gender', '=', 1)->get(); // 男性用户
$users = User::where('gender', 1)->get(); // 同上
$users = User::where('age', '>=', 10)->get(); // 10岁以上用户
$users = User::where('age', '<>', 10)->get(); // 非10岁用户
$users = User::where('name', 'like', 'd%')->get(); // 名字为d开首的用户
$users = User::where('name', 'like', '%d%')->get(); // 名字含d的用户
// 通报前提数组到 where 函数:
$users = User::where([['gender', '=', '1'],['age', '>', '10']])->get(); //10岁以上的男孩
// or语句
$users = User::where('gender', '=', 1)->orWhere('age', '>', '10')->get();

其他where语句

// whereBetween 要领考证列值是不是在给定值之间:
$users = User::whereBetween('age', [1, 7])->get(); // 1-7岁的用户
// whereNotBetween 要领考证列值不在给定值之间:
$users = User::whereNotBetween('age', [1, 7])->get(); // 1-7岁之外的用户
// whereIn 要领考证给定列的值是不是在给定数组中:
$users = User::whereIn('id', [1, 2, 3])->get();
// whereNotIn 要领考证给定列的值不在给定数组中:
$users = User::whereNotIn('id', [1, 2, 3])->get();
// whereNull 要领考证给定列的值为NULL:
$users = User::whereNull('updated_at')->get();
// whereNotNull 要领考证给定列的值不是 NULL:
$users = User::whereNotNull('updated_at')->get();
// whereDate 要领用于比较字段值和日期:
$users = User::whereDate('created_at', '2018-05-10')->get(); // 20180510注册的用户
// whereMonth 要领用于比较字段值和一年中的指定月份:
$users = User::whereMonth('created_at', '10')->get();
// whereDay 要领用于比较字段值和一月中的制订天:
$users = User::whereDay('created_at', '10')->get();
whereYear 要领用于比较字段值和指定年:
$users = User::whereYear('created_at', '2016')->get();
// whereColumn 要领用于考证两个字段是不是相称,也能够通报一个比较运算符到该要领:
$users = User::whereColumn('first_name', 'last_name')->get();
$users = User::whereColumn('updated_at', '>', 'created_at')->get();
        
// 还能够通报多前提数组到 whereColumn 要领,这些前提经由过程 and 操纵符举行衔接:
$users = User::whereColumn([
                ['first_name', '=', 'last_name'],
                ['updated_at', '>', 'created_at']
            ])->get();

参数分组

$users = User::where('name', '=', 'xxx')
        ->orWhere(function ($query) {
           $query->where('age', '>', 5)
                 ->where('gender', 1);
        })
        ->get(); // xxx或大于5岁的男孩
where exit
$users = User::whereExists(function ($query) {
                $query->select(DB::raw(1))
                      ->from('articles')
                      ->whereRaw('articles.user_id = users.id');
})->get(); // 写过文章的用户

排序

$users = User::orderBy('age', 'desc')->get(); // 岁数倒序
$user = User::latest()->first(); //crate_at  最晚的谁人
$user = User::oldest()->first(); //crate_at  最早的谁人
$users = User::inRandomOrder()->first(); // 随机用户

限制

$users = User::skip(2)->take(3)->get(); // 跳过前2个取中心3个
$users = User::offset(2)->limit(3)->get(); // 同上

分组

$users = User::groupBy('name')->having('age', '>', 10)->get(); // 大于10的用户
// 找到一切售价大于 $2,500 的部份, 没明白
$users = User::select('department', DB::raw('SUM(price) as total_sales'))
    ->groupBy('department')
    ->havingRaw('SUM(price) > 2500')
    ->get();
when 前提子句
$sortBy = null; // 当sortBy为null,默许name排序
$users = User::when($sortBy, 
            function ($query) use ($sortBy) {
                return $query->orderBy($sortBy);
            }, function ($query) {
                return $query->orderBy('name');
            })
            ->get();

分页

$users = User::paginate(3);
$users->appends(['sort' => 'name'])->links(); // 修正的是衔接
$users->withPath('custom/url');
// 约束前提
$users = User::where('id', '>', 2)->paginate(2);
$users = User::where('id', '>', 2)->simplePaginate(2);
return $users->toArray();

返回效果:

当挪用 paginate 要领时,你将猎取IlluminatePaginationLengthAwarePaginator 实例,

挪用要领simplePaginate 时,将会猎取 IlluminatePaginationPaginator 实例。(不需要知道效果集合数据项的总数)

{
    "current_page" : 1
    "data": [{"id":1,"name":"name1"},{"id":2,"name":"name2"}]
    "from":1
    "last_page":2
    "next_page_url":"http://localhost:8888/user/page?page=2"
    "path":"http://localhost:8888/user/page"
    "per_page":3
    "prev_page_url":null
    "to":3
    "total":6
}

每一个分页器实例都能够经由过程以下要领供应更多分页信息:

$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (运用simplePaginate 时无效)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (运用simplePaginate 时无效)
$results->url($page)

插进去

插进去

$user = new User;
$user->name = "username";
$user->fill(['grade' => '2']); // 运用 fill 要领经由过程数组属性来添补
$user->save();
$row = array('name' => str_random(3),'email' => str_random(3).'@qq.com')
$user = User::create($row); // 返回模子对象
$id = User::insertGetId($row); // 插进去纪录并返回ID值
$success = User::nsert([
    ['email' => 'taylor@example.com', 'votes' => 0],
    ['email' => 'dayle@example.com', 'votes' => 0]
]); // 插进去多条

更新

单个更新

$user = User::find(1);
$user->name = 'new name';
$user->save();

批量更新

User::where('gender', 1)->update(['age' => 1]);

自增自减

$result = User::increment('age'); // 返回修正的行数
$result = User::increment('age', 2);
$result = User::decrement('age');
$result = User::decrement('age', 2);
$result = User::increment('age',1,['gender' => 1]); // 岁数自增1 且 性别改成1

其他建立要领

$user = User::firstOrCreate(['name' => 'Flight 10']); // 不存在则建立
$user = User::firstOrNew(['name' => 'Flight 10']); // 假如不存在初始化一个新的实$user = User::updateOrCreate(
    ['name' => 'username', 'age' => '16'],
    ['grade' => 3]
); // 将 16岁的username 改成3年级,没有则建立

删除

$user = User::find(1);
$user->delete(); // 经由过程主键查询后,删除模子
User::destroy(1); // 直接经由过程主键删除
User::destroy([1, 2, 3]);
User::destroy(1, 2, 3);
$deletedRows = User::where('age', 0)->delete(); //查询 删除
// 注:经由过程 Eloquent 批量删除时,deleting 和 deleted 事宜不会被触发,由于在举行模子删除时不会猎取模子。

软删除

当模子被软删除后,它们并没有真的从数据库删除,而是在模子上设置一个 deleted_at 属性并插进去数据库,假如模子有一个非空 deleted_at 值,那末该模子已被软删除了。

启用模子的软删除功用,能够运用模子上的IlluminateDatabaseEloquentSoftDeletes trait并增加 deleted_at 列到 $dates 属性:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Flight extends Model
{
    use SoftDeletes;
    // 应该被调解为日期的属性,并增加 deleted_at 列到数据表
    protected $dates = ['deleted_at'];
}
// Laravel Schema 构建器包括一个辅佐函数来建立该数据列:
Schema::table('flights', function ($table) {
    $table->softDeletes();
});

如今,当挪用模子的 delete 要领时,deleted_at 列将被设置为当前日期和时候.

当查询一个运用软删除的模子时,被软删除的模子将会自动从查询效果中消除。

软删除的查询

推断给定模子实例是不是被软删除,能够运用 trashed 要领:

if ($flight->trashed()) {
    //
}
// 假如你想要软删除模子出如今查询效果中,能够运用 withTrashed 要领:
$flights = App\Flight::withTrashed()
            ->where('account_id', 1)
            ->get();
            
// withTrashed 要领也能够用于关联查询中:
$flight->history()->withTrashed()->get();
// onlyTrashed 要领只猎取软删除模子:
$flights = App\Flight::onlyTrashed()
            ->where('airline_id', 1)
            ->get();
            
// 恢复软删除模子,运用restore 要领:
$flight->restore();
// 疾速恢复多个模子,一样,这也不会触发任何模子事宜:
App\Flight::withTrashed()
    ->where('airline_id', 1)
    ->restore();
    
// 也能够用于关联查询:
$flight->history()->restore();
// 永远删除模子,能够运用 forceDelete 要领:
$flight->forceDelete(); // 强迫删除单个模子实例...
$flight->history()->forceDelete(); // 强迫删除一切关联模子...

以上就是Laravel 中Eloquent ORM 相干操纵的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
【PHP开辟框架】Laravel 中Eloquent ORM 相干操纵

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

本文来源:搜奇网

本文地址:https://www.sou7.cn/281667.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>