微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Eloquent ORM 入门(1)

Laravel Eloquent ORM

创建模型

PHP artisan make:model User       // 认对应的表是 users
PHP artisan make:model AbCd       // 认对应的表是 ab_cds
/**
规则:
    1. 除第一个大写字母,其他大写字母前都加上下划线
    2. 所有的大写字母改成小写
    3. 末尾加 s
*/

创建数据表

PHP artisan make:migration create_identity_cards_table  
// 生成迁移文件,该文件是用来创建数据表的

PHP artisan migrate               // 运行迁移文件,即创建数据表
PHP artisan migrate:rollback      // 回滚迁移操作

填充数据表

PHP artisan make:seeder UsersTableSeeder


<?PHP

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

    }
}
我们可以将填充逻辑编写到 run 方法里:

public function run()
{
    DB::table('users')->insert([
        'name' => str_random(10),
        'email' => str_random(10).'@gmail.com',
        'password' => bcrypt('secret'),
    ]);
}

PHP artisan db:seed --class=UsersTableSeeder

模型之读

App\User::all();                          // 返回包含所有对象的集合
\App\User::where('name', 'John')->first(); // 返回对象
\App\User::where('id', 1)->value('name');   // 返回值,例如 'leon'
\App\User::find(3);                        // 返回主键等于 3 的对象
\App\User::find([1, 2]);                   // 返回主键等于 1 和 2 的对象的集合
\App\User::pluck('age');                   // 返回包含字段值的集合
\App\User::pluck('age', 'id');             // 返回关联集合 id => age,pluck 最多 2 个参数
\App\User::count();                        // 返回记录总数
\App\User::max('id');                      // 返回数字,库没有任何记录返回 null
\App\User::min('id');                      // 返回数字,库没有任何记录返回 null
\App\User::avg('age');                     // 返回数字,库没有任何记录返回 null,同名 averge
\App\User::sum('salary');                  // 返回数字,库没有任何记录返回 0

select

$users = \App\User::select('name', 'email as user_email')->get();

$users = \App\User::distinct()->get();
// select distinct * from `users1`

$query = \App\User::select('name');
$users = $query->addSelect('age')->get();
// select `name`, `age` from `users`


->selectRaw('department, SUM(price) as total_sales')
->groupBy('department')
->havingRaw('SUM(price) > ?', [2500])
->orderByRaw('updated_at - created_at DESC')
->get();

排序、分组和分页

orderBy('name', 'desc')

latest()                // === orderBy('created_at', 'desc')

inRandomOrder()
// order by RAND()

->groupBy('account_id')->having('account_id', '>', 100)

->groupBy('site', 'qianjinyike.com')->having('account_id', '>', 100)

skip(10)->take(5)        // 等价于 offset(10)->limit(5)
// limit 5 offset 10

分支执行 sql

// $role 有值才会执行闭包
$role = $request->input('role');

$users = \App\User::when($role, function ($query) use ($role) {
                    return $query->where('role_id', $role);
                })
                ->get();

// $sortBy 有值执行第一个闭包,否则执行第二个闭包
$sortBy = null;
$users = \App\User::when($sortBy, function ($query, $sortBy) {
                    return $query->orderBy($sortBy);
                }, function ($query) {
                    return $query->orderBy('name');
                })
                ->get();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。