Laravel Eloquent 模型属性参数详解

@TODO

$table

模型绑定表名,默认是模型类名 kebab-case 带下划线小写的复数形式。

$primaryKey = ‘id’

$keyType = ‘integer’

fillable

attributes

hidden

casts

数字、字符串类型不需要转换。

appends

$timestamps = true

$dateFormat = ‘Y-m-d H:i:s’

brew 无法执行命令,总出现 Downloading https://.../api/formula.json

每次 brew 命令都出现 Downloading https://formulae.brew.sh/api/formula.json,而且特别慢,总是超时,翻墙了也不管用…
brew 源已经设为阿里云的了,还出现这东西。原因是 brew 4 默认从 HOMEBREW_API_DOMAIN 安装应,每次都下载 formula.json

有两个方式能解决这个问题。

方式1:把 HOMEBREW_API_DOMAIN 设置到国内源,这样每次虽然都会下载 formula.json,但是就几秒的事。

1
2
echo 'export HOMEBREW_API_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles/api' >> ~/.bash_profile
source ~/.zshrc

方式2:禁止从 API 安装应用,不会每次执行命令就跑出这东西,但要手动升级应用。

export HOMEBREW_NO_INSTALL_FROM_API=1 加入 ~/.bash_profile

1
2
echo 'export HOMEBREW_NO_INSTALL_FROM_API=1' >> ~/.bash_profile
source ~/.zshrc

Mac 下用 brew 安装多版本 php

以前用 window 系统的时候,经常去 php 官网下载不同版本的 php 来使用,改一下系统 path 就可以更换默认 php 版本,其它版本用完整路径也可以使用。Mac 上就更省事一点,用 brew 命令就可以安装不同版本的 php,再用 brew-php-switcher 切换默认 php 版本,而且用 pecl 命令就可以安装 pecl 扩展。

查询 php 安装包版本

1
brew search php

执行命令后,你会看到不同版本的 php, 最新版的是不带版本号直接是 php,旧版本带版本号,如:php@8.1php@7.4

安装 php

1
2
brew install php #不带版本号是最新版
brew install php@8.1 # 带版本号

切换 php 版本

阅读更多

Homebrew 设置为阿里源

brew 源极慢,有必要把 Homebrew 源改为成国内源。

Homebrew 源主要有四个部分组成:

名称 说明
brew Homebrew 源代码仓库
homebrew-core Homebrew 核心软件仓库
homebrew-bottles Homebrew 预编译二进制软件包
homebrew-cask 提供 macOS 应用和大型二进制文件

安装 brew

如果还没安装 homebrew,则需要先安装。

用官网推荐安装方式:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

如果安装很慢,可使用清华源安装

1
2
3
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
/bin/bash brew-install/install.sh
rm -rf brew-install

查看当前源

1
2
3
4
5
6
7
8
9
$ cd "$(brew --repo)" && git remote -v
origin https://github.com/Homebrew/brew.git (fetch)
origin https://github.com/Homebrew/brew.git (push)

# 查看 homebrew-core.git 当前源
$ cd "$(brew --repo homebrew/core)" && git remote -v
origin https://github.com/Homebrew/homebrew-core.git (fetch)
origin https://github.com/Homebrew/homebrew-core.git (push)

改为阿里源

阅读更多

Docker 使用实例(部署 LNMP)

docker 参数说明

  • run 运行镜像,将创建容器
  • exec 运行容器(交互式)
  • start/stop/restart 启动/停止/重启容器
  • ps 查看运行中的容器
  • ps -a 查看全部容器
  • -d, –detach 在后台运行容器,并且打印容器id。
  • -i, –interactive 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
  • -t, –tty 分配一个伪tty,一般与 -i 连用。

docker run 参数说明

更多参数说明见官网

  • -v 宿主机文件夹:容器文件夹 目录挂载,使用绝对路径。限制挂载文件夹在容器中只读,加 :ro
  • –name 容器名
  • -p 宿主机端口:容器端口 端口映射
  • –link
  • 最后一个参数为镜像名

1、下载镜像

阅读更多

使用 Dexie.js 简化访问浏览器本地数据库 IndexedDB

localStorage 本地存储各家浏览器分别限制在 2.5M ~ 10M 之间,本地浏览器需要存储较大数据的时候就不能用了, IndexedDB 就能解决这个问题。

IndexedDB 是存储结构类似 MangoDB 的对象存储数据库,不是关系型数据库。 IndexedDB API 稍微有点麻烦,用 Dexie.js 可简化操作。

阅读更多

在 Vue3 <script setup> + 组合式 API 之 怎用使用响应式变量

什么是响应式?

Vue3 的响应式是:当更改响应式对象的值改变时,视图会随即自动更新。

ref()

ref() 返回一个响应式对象,可以用 value 属性来访问或更改对象的值。
ref 对象在模板中会自动解包,用变量名不需要加 .value 就能访问。

1
2
3
4
5
6
7
8
9
10
11
<script setup>
import { ref } from 'vue';

const say = ref('hi'); // 定义值为 hi 的响应式变量 say
say.value = 'hello'; // 把 say 的值改为 hello
</script>

<template>
<!-- 自动解包,不需要些成 {{ say.value }} -->
<p>{{ say }}</p>
</template>

reactive()

阅读更多

Vue3(单文件组件 + <script setup> + 组合式 API)组件实例常用内置属性、方法、函数

本文总结 Vue3 组件实例在模板中暴露的常用公共属性和方法,以及对应的 组合式 API 函数。

$data/$props/$options 属性在 组合式 API 下几乎用不到。
$el 不建议用。
$slots 表示父组件所传入插槽的一个对象,很少用,有兴趣可查看官方文档

$parent

模板中用 $parent 获取父组件实例,可访问父组件用 defineExpose() 显式暴露的绑定。

组合式 API 先在 setup 中用 getCurrentInstance() 获取到当前组件实例,再用 parent 属性访问父组件。getCurrentInstance().parent 除了能访问父组 defineExpose() 暴漏的绑定外,能访问父组件更多的属性和方法,多用于组件的开发,在应用开发中一般不建议用。

1
2
3
4
5
import { getCurrentInstance } from 'vue';

const parent = getCurrentInstance().parent; // 获取父组件的实例
parent.exposed // 访问父组件 defineExpose() 暴露的绑定
parent.refs // 父组件中的模板引用,在模板中用 $parent.$refs

$root

阅读更多

Laravel Eloquent 数据库关联模型的增删改操作

Laravel Eloquent ORM 提供了数据模型关联表操作的 API,熟练掌握这些API后,才体会到 Laravel 数据库操作有多高效。

一、hasMany 一对多关联

save/saveMany 创建关联记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 新建一条数据 Post 的评论,save 将自动添加 post_id 字段
$comment = new Comment(['message' => 'A new comment.']);
$post = Post::find(1);
$post->comments()->save($comment);

// 保持多条记录
$post->comments()->saveMany([
new Comment(['message' => 'A new comment.']),
new Comment(['message' => 'Another new comment.']),
]);

// 更新后需要重新加载模型及其关联,才会加到 $post->comments 中
$post->refresh();

// 所有评论,包括新保存的评论...
$post->comments;

create/createMany 创建关联记录

save/saveMany 的区别是参数时数组,而不是模型。

阅读更多

JavaScript 原型方法:call、apply、bind

callapplybind 是 JavaScript 函数的原型方法,用于改变函数的 this 指向来执行函数。一般这种鬼操作能不用则不用,没得选的时候才有必要用。

  • apply() 调用一个具有给定 this 值的函数,以及以一个数组(或一个类数组对象的形式提供的参数
  • call() 使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数
  • bind() 创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const bar = {
name: 'johnny'
};
function foo (age, hobby) {
console.log(this.name, age, hobby);
}

// apply 和 call 作用相同,传参方式不同
foo.apply(bar, [28, 'sleep']); // johnny 28 sleep
foo.call(bar, 28, 'sleep'); // johnny 28 sleep

// 先绑定对象返回一个函数
const bindBar = foo.bind(bar);
bindBar(28, 'sleep'); // johnny 28 sleep

参考:深入理解JavaScript——call、apply、bind三大将