8-10月PHP使用总结

2019-10-17 10:11:12   PHP

  php,laravel,mysql  

PHP(Laravel)

逻辑运算符(短路运算符)

&&
$a == true && $b = 2 ($a执行失败停止执行,执行成功执行下一个)
||
$a == true || $b = 2 ($a执行成功则停止执行,执行失败则执行下一个)

Group_By(Laravel)

Laravel的分组可以通过下标取到不同的分组值
type = 1=>男
type = 2=>女
$res = User::get()->groupBy('type');
$res->get(1);取到男生的分组数据
$res->get(2);取到女生的分组数据

追加数组的特殊用法

代码
$a = ['name'=>'测试', 'age'=>'18'];
$b = ['color'=>'yellow'];
$c = [$a + ['grade'=>'三年级']];
$d = $a + $b;
dd($c,$d);
结果
array:1 [
  0 => array:3 [
    "name" => "测试"
    "age" => "18"
    "grade" => "三年级"
  ]
]

array:1 [
  0 => array:3 [
    "name" => "测试"
    "age" => "18"
    "color" => "yellow"
  ]
]

注: 加号和array_merge()函数还是有区别的,就是当用加号合并数组时,如果数组间存在同名的键,那么保留前面数组对应的键值,而array_merge()函数正好相反.

模型型关联和集合查询构造器的方法

$user = new User();
$res = $user->has_many_driver->orderBy('id','desc')->first();

empty() ,isset(), != null ,!==null的区别

参见文章

settype 设置数据类型

参见php函数列表

$number = "string";
$res = true;
settype($number, ($res == true ? 'string' : 'integer')); 如果res为true,$number为string类型,否则为integer类型

gettype查询数据类型

gettype ( mixed $var ) : string
返回的字符串的可能值为:
"boolean"
"integer"
"double" (出于历史原因,如果是float,则返回“ double” ,而不是简单的“ float”)
"string"
"array"
"object"
"resource"
"resource" (PHP 7.2.0以后不可用)
"NULL"
"unknown type(未知类型)"

laravel集合中transformTree和map的区别

与其它大多数集合方法一样,map 会返回一个新的集合实例;它不会修改原集合。如果你想修改原集合,请使用 transform 方法。

php比对版本函数

PHP文档

version_compare();

laravel6.0日志分文件处理

env文件添加LOG_CHANNEL=single
AppServiceProvider.php文件的boot()方法添加内容如下

\DB::listen(
    function ($sql) {
        foreach ($sql->bindings as $i => $binding) {
            if ($binding instanceof \DateTime) {
                $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
            } else {
                if (is_string($binding)) {
                    $sql->bindings[$i] = "'$binding'";
                }
            }
        }

        $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);

        $query = vsprintf($query, $sql->bindings);
        // \Log::info($sql->time);
        Log::channel('sql')->info('sql: ' . $query.';time: '.$sql->time.'ms');
    }
);
config下的logging.php文件channels数组追加数组

'sql' => [
            'driver' => env('LOG_CHANNEL', 'stack'),
            'path' => storage_path('logs/sql.log'),
            'level' => 'debug',
            'days' => 30,
        ],

结果如下
[2019-10-23 15:15:01] local.INFO: sql: select `title`, `type` from `product` limit 3;time: 5.87ms  

AppServiceProvider引导问题

boot()每次执行都会调用,可以执行常用操作,例如视图,数据共享,追加验证规则,记录日志等操作

Mysql

设置一个字段的值为另一个字段

update order set created_at = updated_at where created_at = 2019-10-17 00:00:00

连接查询

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。即获取左表数据,左表数据上携带符合条件的右表数据
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。即获取右表数据,左表数据上携带符合条件的左表数据

查询以什么开头结尾的数据并批量修改

select trailer_number from trailer where LEFT(trailer.trailer_number, 1) <> '挂'; 不以挂开头的数据
select trailer_number from trailer where LEFT(trailer.trailer_number, 1) = '挂'; 以挂开头的数据
select trailer_number from trailer where RIGHT(trailer.trailer_number, 1) <> '挂'; 不以挂结尾的数据
select trailer_number from trailer where RIGHT(trailer.trailer_number, 1) = '挂'; 以挂结尾的数据

update trailer set trailer_number = concat('浙', trailer_number); 批量给数据添加浙字前缀
update trailer set trailer_number = concat(trailer_number, '挂'); 批量给数据添加挂字后缀

模型修改器

链式模型关联时要判断该模型是否存在,不存在该模型取值失败,用??判断