PHP7.4后 ?? 与 ?:的区别

PHP7.4版本发布后,新增空(NULL)合并运算符??的语法糖,如果变量存在且值不为 NULL, 它就会返回自身的值,否则返回它的第二个操作数。与以前就存在的简写的条件运算符?:有点类似;

??与?:对比


a = 1;b = a ?: 2;//a 为true就返回自身,否者返回第二个操作数
c =a ?? 2;//a不为null就返回自身,否者返回第二个操作数
// dd(b,c);// int(1)  int(1)a = 0;
b =a ?: 2;//a 为true就返回自身,否者返回第二个操作数c = a ?? 2;//a不为null就返回自身,否者返回第二个操作数
// dd(b,c);// int(2)  int(0)

a = null;b = a ?: 2;//a 为true就返回自身,否者返回第二个操作数
c =a ?? 2;//a不为null就返回自身,否者返回第二个操作数
dd(b,$c);// int(2)  int(2)

空合并运算赋值符 ??=

$name = $name ?? 'john'
可以简写成
$name ??= 'john'

Laravel 模型关系相关函数

模型关系:
\Illuminate\Database\Eloquent\Relations\HasOneOrMany.php
主表 HasOneOrMany 子表

getLocalKeyName();//id 获取主表
getForeignKeyName();//inquiry_id
getQualifiedParentKeyName();//主表.id
getQualifiedForeignKeyName();//从表.inquiry_id

\Illuminate\Database\Eloquent\Relations\BelongsTo.php
从表 BelongsTo 主表
getForeignKeyName();//inquiry_id
getOwnerKeyName();//id
getQualifiedOwnerKeyName();//主表.id
getQualifiedForeignKeyName();//从表.inquiry_id

例如
用户拥有手机
手机属于用户
User->phone()->getForeignKeyName();Phone->user()->getOwnerKeyName();

laravel 日志无权限写入报错(服务器生成日志无权限)

原因分析是:其他角色写入日志导致权限不可写

例如:定时器执行任务的用户不是项目组用户等

日志文件的权限也可以在每天创建时配置

解决方案:不适用root用户创建定时用户,使用www用户创建定时用户
crontab -u www -e

如果服务器环境为宝塔,且使用的是宝塔面板的定时任务
可以使用 su -c 和 -s 搭配操作,为计划任务指定执行用户,来解决此问题。
如:
su -c "/www/server/php/73/bin/php -q /www/wwwroot/xx/artisan schedule:run 2>&1" -s /bin/sh www

Laravel使用migrate更新指定数据表

在项目开发中,数据表往往是分开多次建立的,因此后期使用artisan命令
php artisan migrate
往往会报错
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'xxx' already exists
所以我们可以在database下新建目录new,然后把新建并且数据库中还没有对应表的Migration拷贝到该目录下,然后执行下面命令
php artisan migrate --path=database/new
如果执行还是不成功,可以执行
php artisan migrate:refresh --path=database/new

composer安装laravel Changed current directory to没反应

根据官方手册执行composer global require “laravel/installer”

显示Changed current directory to C:/Users/Administrator/AppData/Roaming/Composer

然后没反应了,因为去国外的镜像地址下载了。

应该先将composer换成国内镜像

composer config -g repo.packagist composer https://packagist.phpcomposer.com