我使用 Laravel Sail 作为我的开发环境。根据文档,
当 MySQL 容器启动时,它将确保存在一个名称与 DB_DATABASE 环境变量的值匹配的数据库。
这非常适合我的开发环境,但在测试方面效果不佳,因为我.env.testing定义了一个单独的数据库,并且似乎没有创建该数据库 - 当我sail mysql进入容器并运行时show databases;,它没有列出。因此,sail test与数据库相关的每个测试都无法运行。
SQLSTATE[HY000] [1045] Access denied for user ...
Run Code Online (Sandbox Code Playgroud)
我的.env文件包含以下内容:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dev
Run Code Online (Sandbox Code Playgroud)
我的.env.testing文件包含以下内容:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
Run Code Online (Sandbox Code Playgroud)
DB_USERNAME并且DB_PASSWORD在两个文件中是相同的。
如何创建此数据库以便在运行时可用sail test?
编辑:
当我深入研究存储库代码mysql时,我发现构建容器映像时正在创建数据库,但看起来没有创建多个数据库的选项。
MYSQL_DATABASE该变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于 GRANT ALL)。
我最近将 Forge 托管的项目迁移到 Laravel 8.x。部署脚本运行时失败composer install,所有消息均与 PHP 版本错误相关:
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
Problem 1
- This package requires php ^7.4 but your PHP version (7.3.26) does not satisfy that requirement.
Problem 2
- Installation request for lcobucci/clock 2.0.0 -> satisfiable by lcobucci/clock[2.0.0].
- lcobucci/clock 2.0.0 requires php ^7.4 || ^8.0 -> your PHP version (7.3.26) does not satisfy that requirement.
...
Run Code Online (Sandbox Code Playgroud)
至少根据 …
如果我从 PHP 中检查数据库版本信息,MariaDB 将在其版本字符串的前面返回一组额外的版本号。
>>> DB::connection()->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION);
=> "5.5.5-10.2.20-MariaDB-1:10.2.20+maria~bionic"
Run Code Online (Sandbox Code Playgroud)
代表什么5.5.5?
我的 Laravel 项目中有一个近乎普通的 webpack.mix.js 和 resources/js/app.js 设置。
webpack.mix.js:
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css');
Run Code Online (Sandbox Code Playgroud)
资源/js/app.js:
require('./bootstrap');
window.Vue = require('vue');
Vue.component('profile', require('./components/profile/Profile.vue').default);
const app = new Vue({
el: '#app'
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我.extract()在 webpack.mix.js 中继续执行,一切都会成功编译,但 Vue 根本不会在浏览器中加载。删除.extract()后一切都会恢复正常。我究竟做错了什么?
我对Laravel来说还是很新的.在我能够在两个模型之间定义多个Eloquent关系之后,我注意到可以将实例传递给它不属于的父模型实例中的方法.所以我认为在方法本身内强制执行这种关系可能会很好.
在Organization.php中:
/**
* @param \App\Contact The Contact to delete
*/
public function deleteContact(Contact $contact)
{
if($contact->organization == $this)
{
$this->contacts->find($contact->id)->delete();
}
else
{
dd('Error: Contact ' . $contact->fname . ' ' . $contact->lname . ' #' . $contact->id . ' does not belong to Organization ' . $this->name . ' #' . $this->id);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我传递实际属于的联系人时,我一直收到自定义错误消息,或者至少我认为他们做了!当我测试关系时tinker,它id为Bob和Bob的组织返回了不同的实例.
>>> $org = Organization::find(17)
=> App\Organization {#2929
id: 17,
name: "Test Org",
primary_contact_id: 33,
} …Run Code Online (Sandbox Code Playgroud) php ×3
docker ×1
laravel ×1
laravel-mix ×1
laravel-sail ×1
mariadb ×1
mysql ×1
vue.js ×1
webpack ×1