首页 » 网站建设 » phpdatetimezoe技巧_Laravel进修笔记1

phpdatetimezoe技巧_Laravel进修笔记1

duote123 2024-12-03 0

扫一扫用手机浏览

文章目录 [+]

当临时代码不知道放在哪个位置的时候,可以用Tinker来运行。

一个运用中配置多个数据连接,大致有三种情形:

phpdatetimezoe技巧_Laravel进修笔记1

1、不同数据库之间的数据,比如mysql和sql server。

phpdatetimezoe技巧_Laravel进修笔记1
(图片来自网络侵删)

2、不同功能的分库,比如客户数据库和业务数据库。

3、读写分离。

迁移中的up和down,up()代表实行升级,down()代表回滚。

Laravel中,迁移类继续自Migration, 命名是CreateUsersTable。

但是在调用时,命令是用小写下划线分隔:

php artisan make:migration create_users_table --create=users

decimal指定精度和范围,比如decimal('amount', 5, 2), 表示小数位数是2位,总的位数是5位,不包括小数点,即整数部分是3位。

修正字段可以利用change()方法:

$table->string('name', 100)->change();// 将name字段改成100的长度。

利用increments()方法给表增加一个主键索引,后面不用再指定主键。

dropIndex()方法会根据传入的数组,预测须要删除的索引:

$table->dropIndex(['email', 'amount']); // 删除建立在email, amount两个字段上的组合索引。

指定外键的方法:

// 在本表user_id字段建立外键,指向users表中的id字段。

$table->foreign('user_id')->references("id")->on('users');

删除外键,可以直接传入本表字段:

$table->dropForeign(['user_id']);

migrate:refresh表示重新安装。
和连续运行migrate:reset, migrate是一样的。

每一个添补器类都须要加入到/database/seeds/DatabaseSeeder.php的run()方法中:

public function run()

{

$this->call(ContactsTableSeeder::class);

}

Faker可以产生比较合理的假数据,例如:$faker->name, $faker->email。
在创建记录时,可以担保记录不重复。

模型工厂的make()方法创建了实例,但是不会把它保存进数据库;但是create()会立时保存。

可以利用DB类调用原始的sql语句。
个中update()和delete()方法可以返回受影响的行数,但是statement()不会。

Illuminate凑集类似于php数组,拥有map(), filter(), reduce(), each()等方法。

map: 根据数组中的每一项设定函数,返回函数处理后的新数组。

filter: 根据函数过滤数组中的每一项,返回新的数组。

reject: 根据函数过滤数组,把符合条件的项目剔除掉。

reduce: 类似于聚合函数,将数组每一项汇总求和,或连接字符串。
根据“聚合”函数处理。

each:返回当前数组的键和值,并且数组指针向前移动到新元素。

组合多个or条件时,可以利用闭包函数:

orWhere(

function($query){

$query->where('created_at', '>', Carbon::now()->subDay())

->where('trial', false);

}

);

重置全体表的自增id和删除全体表的数据:

DB::table('contacts')->truncate();

Eloquent的类名以大写字母开头,并且是单数,例如:

类Contact对应的表名是contacts,SecondaryContact类对应的表名是secondary_contacts。

可以修正继续的韶光格式:protected $dateFormat = 'U';

通过定义可添补字段,防止表的其他字段被修正:protected $fillable = ['name', 'email'];

可以查询的时候,同时根据情形天生记录:

// 查询如果没有记录则创建一条记录在数据库。

Contact::firstOrCreate();

// 创建实例,但是不保存到数据库。

Contact::firstOrNew();

软删除不要轻易利用,利用时,须要把稳清理旧的记录。

// 找出软删除的记录。

Contact::withTrashed()->get();

// 判断实例数据库记录是否被软删除。

if($contact->trashed()){}

类似于快捷查询方法,可以定义实体的浸染域,用于筛选记录:

class Contact{

public function scopeActiveVips($query){

return $query->where('vip', true)->where('trial', false);

}

}

// 利用时去掉scope前缀,首字母小写。

Contact::activeVips()->get();

全局浸染域须要用类定义,继续自Scope, 实现方法apply():

class ActiveScope implemens Scope{

public function apply(Builder $builder, Model $model){

return $builder->where('active', true);

}

}

利用时,在类中boot方法中,通过addGlobalScope()方法加入:

class Contact extends Model{

protected static function boot(){

parent::boot();

static::addGlobalScope(new ActiveScope);

}

}

删除时,将类名传给withoutGlobalScope()方法:

Contact::withoutGlobalScope(ActiveScope::class)->get();

访问器方法的命名规则:

// 去掉下划线,加上前后缀get、set和Attribute。

first_name: getFirstNameAttribute(),setFirstNameAttribute()

可以利用attributes凑集引用字段:

$this->attributes['amount'] = $value > 0 ? $value : 0;

Carbon继续自Datetime,数据库中的date/datetime类型默认解析为Carbon。

Eloquent实体的$dates字段,默认包含created_at和updated_at,还可以加入其他字段:

protected $dates = ['met_at', 'start_at'];

Laravel的路由器会将结果返回成字符串,如果对应实体,则序列化为json格式:

Route::get('api/contacts', function(){

return Contact::all();

});

序列化时,根据白名单指定要序列的属性:

class Contact extends Model{

public $visible = ['name', 'email', 'status'];

}

默认获取数据库记录时,外键关联的实体并不会加载,须要显式指定加载:

User::with('contacts')->first();

如果须要序列化数据库中不存在的字段,则须要在$appends字段中声明:

protected $appends = ['full_name'];

public function getFullNameAttribute(){}

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读0 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读0 评论0